java - 多级继承

标签 java inheritance parent-child

我想对 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();//将打印B.P - 正确

  1. CA 的子级,因此我们可以将 C 对象放入 A 变量中。
  2. AP() 方法,因此我们可以调用 a.P()
  3. C没有自己的P()方法,但它是从B继承的,所以它会打印“B.P”。不是来自 A,因为它已被显式覆盖。

II) D d = new B(); d.Q();//将导致编译错误 - 正确

  1. B 不是 D 的子级,因此我们不能将 B 对象放入 D 变量中。

III) B b = new C(); b.M();//将导致编译错误 - 错误

  1. CB 的子级,因此我们可以将 C 对象放入 B 变量中。
  2. B 没有自己的 M() 方法,但它是从 A 继承的,所以我们可以调用 b.M( )
  3. C 已重写 M() 方法,因此它将打印“C.M”。

IV) A a = new E(); a.P();//将打印 A.P - 正确

  1. EA 的子级,因此我们可以将 E 对象放入 A 变量中。
  2. AP() 方法,因此我们可以调用 a.P()
  3. E 没有自己的 P() 方法,就像 D 一样,但它是通过链从 A< 继承的,因此它将打印“A.P”。

关于java - 多级继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49103658/

相关文章:

java - 每次在递归语句中打印返回值(java)?

java - 如何在 C# 和 Java 中获得相同的 byte[]

C++ 基类函数在子类中重载

css - 当父元素具有不同的不透明度时,如何使子元素的不透明度为 100%?

swift - CoreData 多线程正在生成随机崩溃

java - 使用 RandomAccessFile 到达文件中的特定行

java - 在java中使用for循环无效使用int

通过类型双关的 C 继承,没有包含?

c++ - 类变量的前向声明

css - 在 CSS/LESS 中选择 child 的 child ?