bma*_*pin 3 java oop polymorphism
我是Java初学者.我理解类继承的概念,但有一点我不太明白.我正在阅读Java for Dummies,它正在解释多态性.它以此代码为例:
class Player {
public void move() {...
class BetterPlayer extends Player {
public void move() {...
public class TicTacToeApp {
public static void main(String[] args) {
Player p1 = new Player();
Player p2 = new BetterPlayer();
playTheGame(p1, p2);
}
public static void playTheGame(Player p1, Player p2) {
p1.move();
p2.move();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么p2被创建为Player对象?这是我的理解:
如果p2是一个BetterPlayer对象(声明如下:BetterPlayer p2 = new BetterPlayer ...):-
upcasting是自动的,所以它仍然适用于playTheGame方法
-p2可以被需要BetterPlayer对象的任何方法使用
但由于它是作为Player对象创建的,现在任何时候p2都被需要BetterPlayer对象的方法使用,它必须显式地转换为BetterPlayer对象,对吧?这似乎更多的工作没有任何好处,所以我猜这样做必须有一些好处; 它是什么?
变量p2未创建为Player对象.它是指向BetterPlayer对象的引用.
无论p2是声明为Player还是BetterPlayer引用,它都可以用作Player引用.
将其声明为播放器的一个优点是,您无法耦合任何仅适用于BetterPlayer的代码,并保持打开将来使用代码作为另一个子类选项的选项 - 例如,BestPlayer.