我在AP计算机科学课上学习了继承,并对这个问题感到困惑:
查找以下代码生成的输出:
public class A {
private int xx;
public A() {
xx = 1;
}
public A(int x) {
xx = x;
}
public void addX(int x) {
xx += x;
}
public void multX(int x) {
xx *= x;
}
public int getXX() {
return xx;
}
public String toString() {
return ""+xx;
}
}
public class B extends A {
private int yy;
public B(int y) {
yy = y;
}
public void addY(int y){
yy += y;
}
public void multY(int y) {
yy *= y;
}
public int getYY() {
return yy;
}
public void addBtoA(){
addX(yy);
}
public String toString() {
return ""+yy;
}
}
客户代码:
A a = new A(14);
B b = new B(33);
b.addBtoA();
System.out.println( a.getYY() );
我不明白为什么会导致错误。请帮忙!
答案 0 :(得分:1)
班级A
没有方法getYY
这应该是
System.out.println( b.getYY() );
答案 1 :(得分:1)
B
扩展了A
,因此B
继承了A
的所有方法(除非被覆盖),因此B
个对象可以访问A
方法,但反之则不然。 getYY()
是为B
个对象定义的方法,因此在尝试使用A
个对象访问时会出错。
答案 2 :(得分:0)
a.getYY()错误因为如何在类A的引用上调用类B的公共方法
因为我得到了它的单一继承。 Java允许子类知道超类的所有公共属性。因此,您可以在B中调用A的所有公共方法和属性(例如b.addX(10))。但是反之亦然,这里不允许你从A的引用中调用B中的方法,因为你的案例a中的A类引用对B类没有任何了解。
如果那时你也想调用它,那么请参考InstanceOf操作符 here