0x00:多态描述
同一个对象,在不同时刻表现出来的不同形态。
举例: 猫
我们可以说猫是猫: 猫 cat = new 猫 ();
我们可以说猫是动物: 动物 animal = new 猫 ();
这里猫在不同的时刻表现出来了不同的形态,这就是多态。
多台的前提和体现
- 有继承和实现关系
- 有方法重写
- 有父类引用指向子类对象
范例: 猫
0x02:多态中成员访问特点
- 成员变量: 编译看左边,执行看左边
- 成员方法:编译看左边,执行看右边
为什么成员变量和成员方法不一样?
因为成员方法有重写,而成员变量没有
多态的好处: 提高了程序的扩展性,定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类来进行操作
多态的弊端: 不能使用子类的特有功能
举例:
animal 父类
package com;
public class animal {
public int age = 18;
public void eat(){
System.out.println("动物吃食物");
}
}
cat 类
package com;
public class cat extends animal{
public int age = 18;
public int weight = 10;
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void game() {
System.out.println("猫玩游戏");
}
}
dog类
package com;
public class cat extends animal{
public int age = 18;
public int weight = 10;
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void game() {
System.out.println("猫玩游戏");
}
}
opetaor类
package com;
public class poeator {
public void useanimal(animal a){ //使用animal a 作为参数
a.eat();
}
}
demo测试
package com;
public class Demo {
public static void main(String[] args) {
poeator ao = new poeator();
cat c = new cat();
ao.useanimal(c); 把cat 对象传入到useanimal , 使用 animal a = new cat
dog d = new dog();
ao.useanimal(d);
}
}
0x03:多态中的转型
向上转型:从子到父,父类引用指向子类对象
向下转型:从父到子 父类引用转为子类对象, 可以访问子类中的特有方法