Java 多态性是自下而上的方法调用吗?
我看到过关于OOP和Java的一般性讨论,其中有这样一句话:“多态性只是一个自下而上的方法调用。”我不清楚这是怎么回事。举个例子会很有帮助Java 多态性是自下而上的方法调用吗?,java,oop,Java,Oop,我看到过关于OOP和Java的一般性讨论,其中有这样一句话:“多态性只是一个自下而上的方法调用。”我不清楚这是怎么回事。举个例子会很有帮助 class Top { void foo() {...} } class Middle extends Top class Bottom extends Middle 考虑方法foo(),该方法出现在Top中,但也可以出现在Middle或Bottom中。如果将对象声明为typeTop Top obj = ... 您始终可以对其调用方法foo()。然
class Top {
void foo() {...}
}
class Middle extends Top
class Bottom extends Middle
考虑方法foo()
,该方法出现在Top
中,但也可以出现在Middle
或Bottom
中。如果将对象声明为typeTop
Top obj = ...
您始终可以对其调用方法foo()
。然而,obj
也可能是Bottom
类型,因此在多态情况下,您将在Bottom
上调用foo()
,如果Bottom
没有foo()
则在Middle
上调用它,如果Middle
没有,则在Top
上调用它
因此,您的方法调用从
Bottom
到Top
,在某种程度上…静态类型和动态类型之间的区别对于多态性至关重要。因此,我希望在这个问题上更加小心——具体地说,变量obj
总是属于Top
(“静态类型”),但它所指的对象实际上是子类的实例(“动态类型”)。后者决定调用哪个方法(当多态性存在时)。