java从超类方法调用子类方法?
我的应用程序的结构与此类似:
class Father{
a(){ ... }
b(){a();}
}
class Son extends Father{
a(){ ..... }} //override
b()未被重写。 当我创建一个Son实例并调用b()时,会调用父对象的a(),但我希望它执行子对象(如果对象是子对象)。可能吗
你可以在下面搜索框中键入要查询的问题!
我的应用程序的结构与此类似:
class Father{
a(){ ... }
b(){a();}
}
class Son extends Father{
a(){ ..... }} //override
b()未被重写。 当我创建一个Son实例并调用b()时,会调用父对象的a(),但我希望它执行子对象(如果对象是子对象)。可能吗
# 1 楼答案
应该调用Son的
a
方法。如果不是,那么您要么没有在Son
的实例上操作,要么没有正确地重写该方法。如果签名不完全相同,则可能发生这种情况。我将在您的实现中再次检查签名是否完全相同。另外,尝试在a
的Son
实现上方抛出一个@Override
,看看是否出现编译错误。如果您这样做,那么您没有正确地重写该方法像这样
另外,
a
必须是受保护的或公共的(默认情况下,只有当Father
和Son
在同一个包中时,包私有才起作用)。i、 e.Son
必须能够“看到”a()
方法# 2 楼答案
否/是
如果
a
不是静态方法,那么java使用dynamic binding,因此调用子的a()
方法new Son().b()
将在Son中调用方法a()
。这就是所谓的动态绑定# 3 楼答案
重写的方法在运行时解析,而重载的方法在编译时解析。因此,只需调用new-Son()。a()应该足够了
# 4 楼答案
你所拥有的应该是正确的。方法调用是惰性绑定的。这意味着,当您在
Son
对象中的任何位置调用方法a()
时,将调用的是Son
的方法