bean => Cat name = “猫” show(){System.out.println(“猫在秀”);}
Animal name = “动物” show(){System.out.println(“动物在秀”);}
1,有继承关系
例如: Cat extends Animal)
2,分类引用指向子类对象
Animal animal = new Cat;
一 多态访问成员变量:(编译看左边,运行看左边)
Cat cat = new Cat()
System.out.println(cat.name); =>猫 // 就近原则
Animal animal = new Cat;
System.out.println(animal.name);=》动物 //访问成员变量:编译看左边,运行看左边
二 多态访问成员方法:(编译看左边,运行看右边)
Cat cat = new Cat();
cat.show(); //结果:猫在秀
Animal animal = new Cat();
animal.show(); //结果:猫在秀 (编译看左边,运行看右边) animal本质上是cat
//例子
//人类:写字
//残疾人:用脚写
//正常人:用手写
// 人类 对象名1 = new 残疾人对象();
对象名1. 写字
// 人类 对象名2 = new 正常人对象();
对象名2. 写字
三 多态访问静态成员方法
bean => Cat name = “猫” show1(){System.out.println(“猫静态在秀”);}
Animal name = “动物” show1(){System.out.println(“动物静态在秀”);}
Cat cat = new Cat();
cat.show1(); //结果:猫静态在秀
Animal animal = new Cat();
animal.show1(); //结果:动物静态在秀 (编译看左边,运行左边)
静态方法没有进行重写,所以使用父类的方法。
静态方法的使用和执行主要看对象的类型,因为静态方法属于类的(类名.调用)。
四 综合案例:
public class Demo {
public static void main(String[] args) {
System.out.println("被蜘蛛咬伤之前");
Human human = new Human();
System.out.println(human.getName());//帕克
human.work();//月工资1000美元
System.out.println("被蜘蛛咬伤之后");
Human human1 = new SpiderMan();//将类型由小变大,这叫做自动类型提升!
System.out.println(human.getName());//(多态访问成员变量)
human1.work();// 日赚1000亿美元 (多态访问成员方法)
//新增飞行能力时候
//多态弊端:就是无法访问子类特有的方法.
//编译看左边,运行看右边
//human1.fly();
//怎么才能去调用fly这样一个特有方法
//向下强制转型
SpiderMan sp = (SpiderMan) human1;//将类型从达标校,这叫做强制类型转换!
sp.fly();
}
}
五 1)多态的好处
A:提高了代码的扩展性(由多态保证)
B:提高了代码的维护性(继承保证)
2)多态的弊端
不能使用子类的特有属性和行为