有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从超类方法调用子类方法?

我的应用程序的结构与此类似:

class Father{
a(){ ... }

b(){a();}
}

class Son extends Father{
a(){ ..... }} //override

b()未被重写。 当我创建一个Son实例并调用b()时,会调用父对象的a(),但我希望它执行子对象(如果对象是子对象)。可能吗


共 (4) 个答案

  1. # 1 楼答案

    应该调用Son的a方法。如果不是,那么您要么没有在Son的实例上操作,要么没有正确地重写该方法。如果签名不完全相同,则可能发生这种情况。我将在您的实现中再次检查签名是否完全相同。另外,尝试在aSon实现上方抛出一个@Override,看看是否出现编译错误。如果您这样做,那么您没有正确地重写该方法

    像这样

    class Son extends Father{
      @Override
      a(){ ...}
    }
    

    另外,a必须是受保护的或公共的(默认情况下,只有当FatherSon在同一个包中时,包私有才起作用)。i、 e.Son必须能够“看到”a()方法

  2. # 2 楼答案

    否/是

    • 否:“当我创建一个Son实例并调用b()时,父的a()被调用,“这是错误的
    • 是:“但我希望它执行子1(如果对象是子)。可能吗?”--这就是Java的行为

    如果a不是静态方法,那么java使用dynamic binding,因此调用子的a()方法

    new Son().b()将在Son中调用方法a()。这就是所谓的动态绑定

  3. # 3 楼答案

    重写的方法在运行时解析,而重载的方法在编译时解析。因此,只需调用new-Son()。a()应该足够了

  4. # 4 楼答案

    你所拥有的应该是正确的。方法调用是惰性绑定的。这意味着,当您在Son对象中的任何位置调用方法a()时,将调用的是Son的方法