我想澄清一下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?
答案 0 :(得分:1)
I)A a = new C(); a.P(); //will print B.P
- 正确
C
是A
的孩子,因此我们可以将C
对象放入A
变量。A
有P()
方法,因此我们可以致电a.P()
。C
没有自己的P()
方法,但它是从B
继承的,因此会打印“B.P”。不是来自A
,因为它被明确地覆盖了。 II)D d = new B(); d.Q(); //will cause a compilation error
- 正确
B
不是D
的孩子,因此我们无法将B
对象放入D
变量。 III)B b = new C(); b.M(); //will cause a compilation error
- 错误
C
是B
的孩子,因此我们可以将C
对象放入B
变量。B
没有自己的M()
方法,但它是从A
继承的,因此我们可以致电b.M()
。C
已覆盖M()
方法,因此会打印“C.M”。 IV)A a = new E(); a.P(); //will print A.P
- 正确
E
是A
的孩子,因此我们可以将E
对象放入A
变量。A
有P()
方法,因此我们可以致电a.P()
。E
没有自己的P()
方法,就像D
一样,但它是由A
的链继承的,所以它会打印“AP”。答案 1 :(得分:0)
您可能对Java中的instanceof
运算符感兴趣:
System.out.println("Im a String" instanceof Object); // prints "True"