5 java oop polymorphism inheritance
我一直在研究Java中的继承,作者写了一条语句“确定要执行哪个版本的重写方法的是所引用对象的类型(而不是引用变量的类型)。” 这句话令人非常困惑。
这本书所指的是多态,更具体地说是通过动态调度。
简而言之,请想象以下类:
public class Person {
public Person() {
}
public void introduceYourself() {
}
}
public class Texan extends Person {
public Texan() {
}
public void introduceYourself() {
System.out.printLn("Howdy y'all!");
}
}
public class NewYorker extends Person {
public NewYorker() {
}
public void introduceYourself() {
System.out.printLn("Yo. You got a problem with that?");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,让我们创建一个type的引用变量Person。
Person myBFF;
Run Code Online (Sandbox Code Playgroud)
让我们实例化他
myBFF = new NewYorker();
Run Code Online (Sandbox Code Playgroud)
我们问他自我介绍
myBFF.introduceYourself();
Run Code Online (Sandbox Code Playgroud)
打印:
呦。你对此有看法?
现在,让我们将BFF更改为德克萨斯州。
myBFF = new Texan();
Run Code Online (Sandbox Code Playgroud)
让我们再次拨打同一行,并要求我们的BFF介绍自己。
myBFF.introduceYourself();
Run Code Online (Sandbox Code Playgroud)
打印:
大家好!
在每种情况下,您使用的参考变量都是Person类型。在每种情况下,变量的实例分别是NewYorker和Texan。该实例类型确定调用了describeYourself ()的哪个版本。