Java 使用重写子类方法的超类方法

Java 使用重写子类方法的超类方法,java,inheritance,subclass,superclass,overriding,Java,Inheritance,Subclass,Superclass,Overriding,这是一个措辞奇怪的问题,如果是重复的,我道歉 假设我有一个类foo,其方法a调用方法b: public class foo { public void a() { b(); } public void b() { gamma(); } } 现在我有了一个子类bar,它扩展了foo public class bar extends foo { @Override public void b()

这是一个措辞奇怪的问题,如果是重复的,我道歉

假设我有一个类
foo
,其方法
a
调用方法
b

public class foo
{
    public void a()
    {
       b();
    }

    public void b()
    {
       gamma();
    }
}
现在我有了一个子类
bar
,它扩展了
foo

public class bar extends foo
{
    @Override
    public void b()
    {
       theta();
    }
}

如果我调用
bar.a()
,那么
a
会使用超类中的
b
方法还是子类中的
b
方法?也就是说,将
bar.b()
结束执行
gamma
还是将结束执行
theta

它将使用子类中的方法b。这就是重写方法的要点。扩展其父类的子类可以自由创建更具体的方法实现。当对子类调用重写的方法时,将使用其专用方法代替超类的方法

如果调用bar.a(),a将使用超类中的b方法还是b方法 子类中的方法?也就是说,bar.b()最终会执行gamma吗 或者它最终会执行θ


它将使用
bar.b()
方法。这是

的结果,询问没有问题,但是由于您已经编写了代码,您可以自己通过日志记录或将其写入控制台来检查代码。我总是很乐意做这样的实验来探索将要发生的事情——这样你有时可以找到新的方法来做一些你现在可能不会缩进的事情,但以后你会发现已经做了很有用。有时你可能会重新发明轮子,但带着好奇心,通过自己做各种各样的小事,你学到的不仅仅是答案