我想澄清一下Java中的多级继承。有人可以解释每个例子输出(例如,在选项(i)和(iv)之间,对象的类是上面的直接父类,还是主要的父类A)?
i) A a = new C(); a.P(); will print B.P T/F?
ii) D d = new B(); d.Q(); will cause a compilation error T/F?
iii) B b = new C(); b.M(); will cause a compilation error T/F?
iv) A a = new E(); a.P(); will print A.P T/F?
I)A a = new C(); a.P(); //will print B.P
- 正确
C
变量中。A
有C
方法,所以我们可以打电话给A
。A
没有它自己的P()
方法,但它是从a.P()
继承的,因此它将打印“B.P”。不是来自C
,因为它被明确地覆盖了。II)P()
- 正确
B
不是A
的孩子,所以我们不能把D d = new B(); d.Q(); //will cause a compilation error
对象放到B
变量。III)D
- 错误
B
变量中。D
没有它自己的B b = new C(); b.M(); //will cause a compilation error
方法,但它是继承自C
,所以我们可以调用B
。IV)C
- 正确
B
变量中。B
有M()
方法,所以我们可以打电话给A
。b.M()
的链继承的,所以它将打印“A.P”。您可能对Java中的C
运算符感兴趣:
M()