一.什么是多态?
多态就是一个事物的多种状态。
多态的规则
1.类与类之间必须有关系(继承关系)
2.必须要有方法的重写(没有重写没有意义)
3.核心:父类的引用(指针)指向子类的对象(空间)
二.多态如何调用成员变量
父类只能访问子类空间中属于父类的那块空间
编译:查看父类中是否有这个属性 没有就编译错误
运行:访问是父类中 这个成员变量
三.多态如何调用成员方法
编译:看父类中是否有该方法,没有就报错,有就编译通过
运行:调用子类重写父类的方法
对应代码
public class Demo02 { public static void main(String[] args) { //多态的创建形式 Father son = new Son(); son.print(); System.out.println(son.num); Son son2 = new Son(); son2.print(); System.out.println(son2.num); } } class Father{ int num = 10; public void print() { System.out.println("我是父类的打印方法"); } } class Son extends Father{ int num = 20; public void print() { System.out.println("我是子类的打印方法"); } }
四.多态的优缺点
优点:1.减少代码量,提高工作效率,复用性强(其实就是改善了代码的可维护性)。2.(核心)提高方法的扩展性
弊端:当使用多态方式创建对象时,无法直接调用子类中特有的方法。
那么当使用多态方式创建对象时,如何调用子类中特有的方法呢?
在使用多态方式创建对象时,我们对子类对象进行了向上转型,如果我们想用调用子类中特有的方法,首先,使用强制类型转换,将其再向下转型(打回原形),然后就可以使用这个对象调用它特有的方法。
代码展示
public class Demo03 { public static void main(String[] args) { //多态创建对象 //提升骗子逼格 //提升子类对象类型--向上转型 Person p = new PianZi(); p.speak(); //如何调用子类的特有方法 //把装成人的骗子打回原形 //向下转型-- 强制类型转换 PianZi pZ =(PianZi)p; //调用子类的特有方法 pZ.hit(); } } class Person{ public void speak() { System.out.println("聊天"); } } class PianZi extends Person{ @Override public void speak() { System.out.println("洗脑"); } public void hit() { System.out.println("打人"); } }