多态

           《第三章 多态》

polymorphism 多态 instance 例子
override 重载 constructor 构造器
ClassCastException 类型转换异常
upcasting 上抛 downcasting 向下转换
abstract 抽象
1.多态 是具有表现多种形态的能力的特征
同一个实现接口,使用不同的实例而执行不同的操作
2.子类向父类的转型
Dog dog=new Dog();
dog.eat();
Pet pet=new Dog();
pet.eat();
//Dog类继承自Pet类,调用的是子类重写的方法 而不是父类的方法
将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换.
此时通过父类引用变量调用的是子类覆盖或继承父类的方法,不是父类的方法
此时通过父类引用变量无法调用子类特有的方法
3.使用父类方法作为形参实现多态
//主人类
public class Master{
private String name="";
private int money=0;
public Master(String name,int money){
this.name=name;
this.money=money;
}

public void feed(Pet prt){
pet.eat();
}
public void feed(Dog dog){
dog.eat();
}
public void feed(Cat cat){
cat.eat();
}
//…省略代码
}
//测试类 领养宠物并喂食
public class Test{
public static void main(String[] args){
Master master=new Master(“天命”,100);
Pet pet=new Dog(“doge”,“柴犬”);
}
}
优势:减少代码量 提高代码的可扩展性和可维护性
4.使用父类作为方法返回值实现多态
//主人类
public class MasterP{
private String name="";
private int money=0;
public Master(String name,int money){
this.name=name;
this.money=money;
}
//领养宠物
public Pet getPet(int petType){
Pet pet=null;
if(petType1){
pet=new Dog();
}else if(petType
2){
pet=new Cat();
}
return pet;
}
}
//Main方法
public class Test{
public static void main(String[] args){
int petType=input.NextInt();
Master m=new Master();
Pet pet=m.getPet(petType);
if(pet!=null){
//…
}
}
}
实现多态的三个条件
继承的存在
子类重写父类方法
父类引用变量指向子类对象
5.父类到子类的转换(向下转型)
当向上转型发生后,无法调用子类特有的方法
将一个指向子类对象的父类引用,称为向下转型,此时必须进行强制类型转换
Dog dog=(Dog)pet;
dog.CatchBorn();
6.instanceof 运算符
向下转型时 如果没有转换为真实子类类型 就会出现类型转换异常
在强制转换之前通过 instanceof 运算符进行检查对象的真实性
if(pet instanceof Dog){
Dog dog=(Dog)pet;

使用 instanceof 运算符时,对象的类型必须和 instanceof 的第二个参数所指定的类或接口在继承树上有上下级关系,否则会编译报错
}
多态;
所谓多态?多态就是一个对象多种形态
即:父类引用类型变量指向了子类对象或者接口引用类型变量指向了实现类对象
多态的前提: 必须存在继承 | 实现关系
继承关系下的多态
父类类型 变量名 = new 子类对象();
比如:
Animal animal = new Dog();
1
多态的注意事项:
1:在多态情况下,子父类存在同名的成员变量时,默认会访问父类的成员变量
2:在多态情况下,子父类存在同名的非静态方法时,默认是调用子类的非静态方法
3:在多态情况下,子父类存在同名的静态方法时,默认是调用父类的静态方法
4:在多态情况下,不能直接访问子类特有的成员,若要访问,需要强转
总结:
多态情况下,子父类存在同名的成员时,默认都会访问父类的成员,只有存在非静态同名方法时,
才会方法调用子类的非静态方法,若要在多态情况下调用到子类的特有的成员,那么必须进行强制类型转换
多态的应用场合:
1:多态用于形参类型时,可接受更多类型的参数
2:多态用于返回值类型时,可接受更多类型的参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值