第2节多态
多态中成员访问特点
- 成员变量:编译看左边,执行看左边
- 成员方法:编译看左边,执行看右边
为什么成员变量和成员方法访问不一样呢?
- 因为成员方法有重写,而成员变量没有
package itheima_06; public class Animal { public int age = 40; public void eat(){ System.out.println("动物吃东西"); } }
package itheima_06; public class Cat extends Animal { public int age = 20; public int weight = 10; @Override public void eat() { System.out.println("猫吃鱼"); } public void playGame() { System.out.println("猫捉迷藏"); } }
package itheima_06; /* * 测试类 * */ public class AnimalDemo { public static void main(String[] args) { //有父类引用指向子类对象 Animal a=new Cat(); System.out.println(a.age); //System.out.println(a.weight); a.eat(); //a.palyGame(); } }
多态的好处和弊端
- 多态的好处:提高了程序得到扩展性
- 具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
- 多态的弊端:不能使用子类的特有功能
package itheima_07; public class Animal { public void eat(){ System.out.println("动物吃东西"); } }
package itheima_07; public class Cat extends Animal{ @Override public void eat() { System.out.println("猫吃鱼"); } }
package itheima_07; public class Dog extends Animal{ @Override public void eat() { System.out.println("狗吃骨头"); } public void lookDoor(){ System.out.println("狗看门"); } }
package itheima_07; /* * 动物操作类 * */ public class AnimalOperator { /* public void useAnimal(Cat c){ //Cat c=new Cat(); c.eat(); } public void useAnimal(Dog d){ d.eat(); }*/ public void useAnimal(Animal a){ //Animal a=new Cat(); //Animal a=new Dog(); //编译看左边,执行看右边 a.eat(); //a.lookdoor(); } }
package itheima_07; /* * 测试类 * */ public class AnimalDemo { public static void main(String[] args) { //创建动物操作类的对象,调用方法 AnimalOperator ao=new AnimalOperator(); Cat c=new Cat(); ao.useAnimal(c); Dog d=new Dog(); ao.useAnimal(d); } }
多态中的转型
- 向上转型
- 从子到父
- 父类引用指向子类对象
- 向下转型
- 从父到子
- 父类引用转为子类对象
package itheima_08; public class Animal { public void eat(){ System.out.println("动物吃东西"); } }
package itheima_08; public class Cat extends Animal{ @Override public void eat() { System.out.println("猫吃鱼"); } public void playGame(){ System.out.println("猫捉迷藏"); } }
package itheima_08; public class AnimalDemo { public static void main(String[] args) { //多态 Animal a=new Cat();//向上转型 a.eat(); //a.playGame(); /* //创建Cat类的对象 Cat c=new Cat(); c.eat(); c.playGame(); */ Cat c=(Cat)a;//向下转型 c.eat(); c.playGame(); } }

浙公网安备 33010602011771号