2016-02-26 189 views
-2

我了解我的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()); 

我不明白为什么这会导致错误。请帮忙!

+4

什么“错误”?这与预期有何不同?和*为什么*?请明确点。 – user2864740

回答

1

A不具有方法getYY

这应该是

System.out.println(b.getYY()); 
1

B延伸A,所以B继承所有的方法(除非被覆盖)从A,所以B对象可以访问A方法,但相反是不正确的。 getYY()是为B对象定义的一种方法,所以当您尝试使用A对象访问对象时会出现错误。

0

误差a.getYY(),因为你如何可以调用B类的公共方法对类的引用的

当我得到了它的一种单继承的。 Java允许子类知道超类的所有公共属性。因此,您可以调用B中A的所有公共方法和属性(例如b.addX(10))。但是反之亦然,在这里是不允许的,你不能在B中引用A中的方法,因为在你的情况a中A类的参考对B类没有任何了解。

如果那么你也想调用它然后参考InstanceOf运算符 here

相关问题