向上转型
从子类到父类
父类引用指向子类对象
向下转型
从父类到子类
父类引用转为子类对象
public class Animal { public void eat() { System.out.println("动物吃东西"); } }
public class Cat extends Animal{ public void eat() { System.out.println("猫吃鱼"); } public void playGame() { System.out.println("猫玩捉迷藏"); } }
public class AnimalDeom { public static void main(String[] args) { //上转型 Animal a = new Cat(); a.eat(); // a.playGame(); 向上转型的父类对象中必须和子类有共同的方法 Cat c = new Cat(); c.playGame(); //下转型 Cat s = (Cat)a; s.playGame(); s.eat(); } }
这几段代码不难理解,但需要着重注意上转型和下转型几个关键语句:
上转型:
Animal a = new Cat();
Animal 类的对象a,后面是开辟了一个空间Cat,从多态的概念上理解就是说,Cat有属于自己的属性和行为(Cat里面有两个行为(方法)),它可以用自己的类创建对象,这样所创建对象的属性和行为都是自己类里面的,
但是它也可以通过父类来创建对象,这里的Animal相当于动物类,就是Cat既有属于自己的属性,也有属于动物的属性,当它用动物类创建对象后,便失去了自己独有的属性,这也就是为什么编译不出a.playGame();
下转型:
Cat s = (Cat)a;
左边是子类对象Cat,后面s相当于变量名,后面的相当于把父类对象给强制转换成子类对象。