多级继承

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多级继承相关的知识,希望对你有一定的参考价值。

我想澄清一下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 - 正确

  1. qazxsw poi是qazxsw poi的孩子,所以我们可以将qazxsw poi对象放到C变量中。
  2. AC方法,所以我们可以打电话给A
  3. A没有它自己的P()方法,但它是从a.P()继承的,因此它将打印“B.P”。不是来自C,因为它被明确地覆盖了。

II)P() - 正确

  1. B不是A的孩子,所以我们不能把D d = new B(); d.Q(); //will cause a compilation error对象放到B变量。

III)D - 错误

  1. qazxsw poi是qazxsw poi的孩子,所以我们可以将qazxsw poi对象放到B变量中。
  2. D没有它自己的B b = new C(); b.M(); //will cause a compilation error方法,但它是继承自C,所以我们可以调用B
  3. qazxsw poi已经覆盖了qazxsw poi方法,所以它会打印出“C.M”。

IV)C - 正确

  1. qazxsw poi是qazxsw poi的孩子,所以我们可以将qazxsw poi对象放到B变量中。
  2. BM()方法,所以我们可以打电话给A
  3. qazxsw poi没有它自己的qazxsw poi方法,就像qazxsw poi一样,但它是由b.M()的链继承的,所以它将打印“A.P”。
另一答案

您可能对Java中的C运算符感兴趣:

M()

以上是关于多级继承的主要内容,如果未能解决你的问题,请参考以下文章

C++多级虚继承编译问题

在多级和多级继承中使用 super()

CRTP 和多级继承

如何使用类实现多级继承

C++中的多级保护继承

nodejs常用代码片段