访问抽象类方法

时间:2019-02-15 18:18:32

标签: java oop inheritance abstract-class

我有三种不同的课程:

1-)

abstract class A {
abstract void one();
void two(){
    System.out.println("two");
one();
}
abstract void three();
 }

2-)

abstract class B extends A {
void one() {
    System.out.println("one");
    three();//I think this method has to run
}

void three() {
    System.out.println("3");//That
}
}

3-)

public class C extends B {
void three(){
    System.out.println("three");
}

}

在Main方法中

public static void main(String [] args){
C c=new C();
c.one();
c.two();
c.three();
}

输出:

one
three
two
one
three
three

但是我认为在第二个代码中,one()方法必须运行其三个方法,并且必须显示“ 3”而不是“三个”,但是此代码在C类中运行三个。

3 个答案:

答案 0 :(得分:1)

在B类和C类中,three()方法都被覆盖

由于c是C类的实例,因此任何对带有c对象的three()方法的引用都将调用C类中的three()实现。

答案 1 :(得分:1)

three()中的C方法被覆盖。由于c拥有C的实例,因此您将看到输出。

答案 2 :(得分:0)

java中的重写始终基于引用“ c”中的目标对象进行。因此,首先,它将在C类中使用three()方法的任何可用重写版本,否则,将执行后续的父类版本。