0

我有一个关于覆盖方法的问题。好的,我们这里有一个 OOP,我可以理解我会得到什么结果。但是.. jdk 如何解决,在每种情况下使用什么实现?

public class One {
    One() {
        run();
    }

    public void run() {
        System.out.println("One");
    }
}

public class Two extends One {
    @Override
    public void run() {
        System.out.println("Two");
    }
}

public class Test {
    public static void main(String[] args) {
       One test = new Two();
    }
}

我真的很抱歉没有很好的代码清单,我很着急。添加了更改。

4

2 回答 2

2

首先,声明类的方式是错误的,并且静态方法也不参与覆盖,因为静态方法未绑定到对象。

于 2013-05-17T17:05:56.480 回答
0

Java 将在 vtable 中查找两个函数。如果没有找到,它将在 vtable 中查找 One。在这种情况下,它被找到了(并直接用@Override 注明),所以它被使用了。

https://stackoverflow.com/a/1543311/431415

基本上,它将从最具体到最不具体,寻找匹配的功能。

于 2013-05-17T16:44:55.383 回答