Day-12 重写和多态

1. 方法重写

1.1 定义:当父类中的方法不足以满足子类使用的时候,子类可以对这个方法进行 重新编写,这就是所谓的方法重写。

1.2 特点:

  1. 在子类中进行方法重写

  2. 方法名相同

  3. 参数列表相同

  4. 返回值类型相同或者为其子类

  5. 访问类型权限修饰符不能严于父类

2. 方法重写与方法重载的比较
比较项位置方法名参数表返回值访问修饰符
方法重写子类相同相同相同或是其子类不能比父类更严格
方法重载同类相同不相同无关无关
3. 多态

3.1 定义:同一个父类引用,指向不同的子类实例,执行的操作不一样。操作不一样,体现在子类重写的方法中,所以说方法重写是实现多态的前提。

3.2 多态的前提:

  1. 有继承 / (可以有实现关系)

  2. 有方法重写

  3. 有父类引用指向子类对象

3.5 多态的格式

父类类型  变量名 = new 子类类型();//然后通过 变量名.方法名()调用在子类中重写的方法//多态体现为父类引用变量可以指向子类对象:定义了一个父类类型的引用,指向新建的子类类型的对象,由于子类是继承他的父类的,所以父类类型的引用是可以指向子类类型的对象的
4. 向上转型:父类的引用(继承对象名/变量名)指向子类的实例。
5. 向下转型:子类的引用指向父类的引用,需要强制转换。

*注:这里的类型转换可能出现一个类型转换异常ClassCastException,

解决办法:Java为我们提供了一个关键字instanceof,它可以帮助我们避免出现ClassCastException这样的异常。

instanceof :判断左边的引用,是否是右边的数据类型。

变量名  instanceof   数据类型
//解释
    1.如果变量属于该类型或者其子类型,返回true;
    2.如果变量不属于该类型或者其子类型,返回false。


 pet = new Penguin("QQ",100,98,"公");
 pet.printInfo();
  //pet.swimming();
  //Dog dog2 = (Dog)pet;
  //因为上面pet指向的是Penguin类对象,你在向下转型中应该将其转换为		Penguin类对象,不能将其转换为其它子类对象
  //为了避免在向下转型过程中,出现类型转换异常,可以使用instanceof运算	  符进行类型判断。instanceof运算符的结果是布尔值
  if(pet instanceof Dog){
            Dog dog2 = (Dog)pet;
            dog2.eat();
        }else if(pet instanceof Penguin) {
            Penguin penguin = (Penguin)pet;
            penguin.swimming();
        }

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值