多态 上转型 下转型
程序员文章站
2023-12-25 22:29:15
...
为什么使用多态
public class Master{
public void feed(Dog dog){
dog.eat();
}
public void feed(Penguin pgn){
pgn.eat();
}
public void feed(XXX xxx){
xxx.eat();
}
}
这些动物类都继承Pet 的子类
用一个feed(Pet pet)去实现对所有动物的喂食
public class Master{
public void feed(Pet pet)
}
多态代码优化
如何实现多态
思路
- 编写父类
- 编写子类 ,子类重写父类的方法
- 运行时 使用父类的类型 子类的对象
Pet pet = new Dog(); //使用上转型
实现多态的形式
- 使用父类作为方法形参实现多态
- 使用父类作为方法返回值实现多态
方法形参:
public class Master{
public void feed(Pet pet){
pet.eat();//父类方法
}
}
测试类
Pet pet = new Dog();
Mater master = new Master;
master.feed(pet);
上转型
public class Dog extends Ret{
public void catch(){
....
}
}
public class Master{
public void play(Pet pet){
pet.catch();//报错 上转型的pet不能调用子类的特有方法。
}
}
下转型
public class Master{
public void play(Pet pet){//如果传入的是狗狗
if(pet instanceof Dog){
Dog dog = (Dog)pet
dog.catch();
}
}
}
instanceof 用法 是判断是否是继承关系
pet instanceof Dog 判断pet 的类型是否为Dog的父类