【问题标题】:JDK and overriding? [duplicate]JDK和覆盖? [复制]
【发布时间】:2013-05-17 16:39:31
【问题描述】:

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

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

【问题讨论】:

  • 目前还不清楚您所说的详细程度。你的意思是在 JIT 编译的代码级别?
  • public class One() 这不是你声明一个类的方式,你也不会覆盖static 方法。

标签: oop overriding java


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2013-04-27
    • 2012-02-16
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多