JDK和压倒一切?

时间:2013-05-17 16:39:31

标签: oop override java

我有一个关于重写方法的问题。好的,我们在这里有一个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();
    }
}

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

Java将在vtable for Two中查找该函数。如果找不到它,它会在vtable中查找One。在这种情况下,它被找到(并直接用@Override记录),所以它被使用了。

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

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