1. 多态
1.1 多态概述
同一个对象,在不同时刻表现出的不同形态
例:猫
可以说猫是猫:猫 cat = new 猫()
可以说猫是动物:动物 animal = new 猫 ()
(猫在不同时刻表现出来了不同的动态,既多态)
多态的前提和体现:
(1)有继承/实现关系
(2)有方法重写
(3)有父类引用指向子类对象
packageduotai; publicclassanimal { publicvoideat(){ System.out.println("动物吃东西"); } }
packageduotai; publicclasscatextendsanimal{ publicvoideat() { System.out.println("猫吃鱼"); } }
packageduotai; publicclassDemo { publicstaticvoidmain(String[] args) { animala=newcat(); } }
1.2 多态中成员访问特点
成员变量:编译看左边,执行看左边;
成员方法:编译看左边,执行看右边;
成员变量和成员方法的访问不一样:(成员方法有重写,成员变量没有)
packageduotai; publicclassanimal { publicintage=4; publicvoideat(){ System.out.println("动物吃东西"); } }
packageduotai; publicclasscatextendsanimal{ publicintage=5; publicintweight=6; publicvoideat() { System.out.println("猫吃鱼"); } publicvoidweight(){ System.out.println("gggg"); } }
packageduotai; publicclassDemo { publicstaticvoidmain(String[] args) { animala=newcat(); System.out.println(a.age); //System.out.println(a.weirht);a.eat(); //a.weight(); } }
4猫吃鱼
1.3 多态的好处和弊端(*)
好处:提高了程序的扩展性。
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型进行操作。
弊端:不能使用子类的特有功能。
1.4 多态中的转型
(1)向上转型:从子到父,父类引用指向子类对象;
(2)向下转型:从父到子,父类引用转为子类对象。
packageduotai; publicclassanimal { publicintage=4; publicvoideat(){ System.out.println("动物吃东西"); } }
packageduotai; publicclasscatextendsanimal{ publicintage=5; publicintweight=6; publicvoideat() { System.out.println("猫吃鱼"); } publicvoidweight(){ System.out.println("gggg"); } }
packageduotai; publicclassDemo { publicstaticvoidmain(String[] args) { animala=newcat();//父类引用指向子类对象(向上转型)a.eat(); //a.weight();//创建cat类的对象catc=newcat(); c.eat(); c.weight(); //向下转型:catc1= (cat)a;//强转c1.eat(); c1.weight(); } }
猫吃鱼猫吃鱼gggg猫吃鱼gggg