【问题标题】:Multilevel Inheritance多级继承
【发布时间】:2018-03-05 04:51:31
【问题描述】:

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

【问题讨论】:

标签: java inheritance parent-child


【解决方案1】:

I) A a = new C(); a.P(); //will print B.P - 正确

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

II) D d = new B(); d.Q(); //will cause a compilation error - 正确

  1. B 不是D 的子对象,所以我们不能将B 对象放到D 变量中。

III) B b = new C(); b.M(); //will cause a compilation error - 错误

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

IV) A a = new E(); a.P(); //will print A.P - 正确

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

【讨论】:

    【解决方案2】:

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

    System.out.println("Im a String" instanceof Object);  // prints "True"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多