目录
1.多态
1.1多态概述
同一个对象,在不同时刻表现出来的不同形态
举例:猫
我们可以说猫是猫:猫cat=new猫();
我们也可以说猫是动物:动物animal=new猫0;
这里猫在不同的时刻表现出来了不同的形态,这就是多态多态的前提和体现
有继承/实现关系有方法重写
有父类引用指向子类对象
代码演示:
动物类:
package zyy02; public class Animal { public void eat(){ System.out.println("动物吃东西"); } }
猫类:
package zyy02; public class Cat extends Animal{ @Override public void eat() { System.out.println("猫吃鱼"); } }
测试类:
package zyy02; public class Demo { public static void main(String[] args) { Animal a=new Cat(); } }
1.2多态中成员访问特点
成员变量:编译看左边,执行看左边
成员方法:编译看左边,执行看右边
为什么成员变量和成员方法的访问不一样呢?
因为成员方法有重写,而成员变量没有
代码演示:
动物类:
package zyy02; public class Animal { public int age=18; public void eat(){ System.out.println("动物吃东西"); } }
猫类:
package zyy02; public class Cat extends Animal{ public int age=14; public int weight=100; @Override public void eat() { System.out.println("猫吃鱼"); } public void playGame(){ System.out.println("猫捉迷藏"); } }
测试类:
package zyy02; public class Demo { public static void main(String[] args) { Animal a=new Cat(); System.out.println(a.age); //System.out.println(a.weight); a.eat(); //a.playGame(); } }
运行结果:
1.3多态的好处和弊端
多态的好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作多态的弊端:不能使用子类的特有功能
1.4多态中的转型
向上转型
从子到父
父类引用指向子类对象向下转型
从父到子
父类引用转为子类对象
代码演示:
package zyy02; public class Demo { public static void main(String[] args) { Animal a=new Cat();//向上转型 a.eat(); //a.playGame; //创建Cat类对象 Cat c=new Cat(); c.eat(); c.playGame(); //向下转型 Cat c1=(Cat)a; c1.eat(); c1.playGame(); } }