多级继承

时间:2018-03-05 04:51:32

标签: 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?

2 个答案:

答案 0 :(得分: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,因为它被明确地覆盖了。
  4. II)D d = new B(); d.Q(); //will cause a compilation error - 正确

    1. B不是D的孩子,因此我们无法将B对象放入D变量。
    2. 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”。
      4. IV)A a = new E(); a.P(); //will print A.P - 正确

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

答案 1 :(得分:0)

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

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