Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多态性是自下而上的方法调用吗?_Java_Oop - Fatal编程技术网

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()。然

我看到过关于OOP和Java的一般性讨论,其中有这样一句话:“多态性只是一个自下而上的方法调用。”我不清楚这是怎么回事。举个例子会很有帮助

class Top {
   void foo() {...}
}
class Middle extends Top
class Bottom extends Middle
考虑方法
foo()
,该方法出现在
Top
中,但也可以出现在
Middle
Bottom
中。如果将对象声明为type
Top

Top obj = ...
您始终可以对其调用方法
foo()
。然而,
obj
也可能是
Bottom
类型,因此在多态情况下,您将在
Bottom
上调用
foo()
,如果
Bottom
没有
foo()
则在
Middle
上调用它,如果
Middle
没有,则在
Top
上调用它


因此,您的方法调用从
Bottom
Top
,在某种程度上…

静态类型和动态类型之间的区别对于多态性至关重要。因此,我希望在这个问题上更加小心——具体地说,变量
obj
总是属于
Top
(“静态类型”),但它所指的对象实际上是子类的实例(“动态类型”)。后者决定调用哪个方法(当多态性存在时)。