多态
同一个引用类型,使用不同的实例而执行不同操作
多态的优势
1.可替换性
2.可扩充性
3.灵活性
4.简化性
实现思路/实现多态的三个要素
1.编写具有继承关系的父类和子类
2.子类重写父类的方法
3.使用父类的引用指向子类的对象
向上转型规则(子类到父类转换)
Pet pet =new Cat(); //父类型 引用变量名=new 子类型
1.将一个父类的引用指向一个子类对象被称为向上转型,系统会自动进行类型转换
2.通过父类引用变量调用的方法是子类重写或继承子类方法,不是父类的方法
3.通过父类引用变量无法调用子类特有的方法
实现多态形式
父类:
public void weiDog(Dog dog){ dog.chi(); } public void weiCat(Cat cat){ cat.chi(); } public void wei(Pet pet){ pet.chi(); }
Main方法:
Dog dog = new Dog(); Cat cat = new Cat(); Person person = new Person(); person.weiDog(dog); person.weiCat(cat); person.wei(dog); person.wei(cat);
1.使用父类作为方法形式参数实现多态
2.使用父类作为方法返回值实现多态
向下转型(父类到子类转换)
子类型 引用变量名=(子类型) 父类型的引用变量 Person person1=(Person) Pet; person1.yang("狗");
将一个指向子类对象的父类引用赋给一个子类的引用 ,即将父类类型转换为子类类型
此时必须进行强制类型转换,将父类类型转换我它的某个子类类型
instanceof运算符
用于判断一个对象是否属于一个类
Pet pet=new Dog();//父类 父类引用变量=new 子类 pet.chi(); if(pet instanceof Dog){ ((Dog)pet).yang();//类型判断 }