多态,指同一个方法在不同类下返回不同的结果的特性,它允许不同类的对象对同一消息作出不同响应,具体实现逻辑是:父类引用指向子类对象。
让我们以游戏开发为例:
Player.java
public class Player {
public Player() {
}
public void attack() {
System.out.println("玩家发动了攻击。");
}
}Soldier.java
public class Soldier extends Player{
@Override
public void attack() {
System.out.println("战士发动了物理攻击。");
}
}Magician.java
public class Magician extends Player {
@Override
public void attack() {
System.out.println("法师发动了魔法攻击。");
}
}Test.java
public class Test {
public static void main(String[] args) {
Player player1 = new Player();
Player player2 = new Soldier();
Player player3 = new Magician();
相对于向上转型,java里也有向下转型,即子类引用指向父类对象。
示例代码:
Player player = new Soldier();
\\ 省略若干中间代码...
if (player instanceof Soldier) {
Soldier soldier = (Soldier) player;
}此时,该实例能向下转型的前提条件是:
该实例在创建时必须与向下转型的子类一致(即必须为Soldier类);
如果实例创建类型与向下类型不一致,则无法完成向下转型的操作。
关于instanceof的说明:
语句A instanceof B 语句能得到:A实例是否属于B类对象;
instanceof在这里可以用来判断A是否能完成对B的向下转型。