方法重写与多态

  1. 方法重写
    1. 创建一个子类对象,子类对象调用方法XXX,
      • 如果子类没有XXX方法就调用父类的方法XXX 方法
      • 如果子类重写了XXX 方法就调用子类的XXX方法
    2. 重写规则:
      • 访问修饰符不能严于父类
      • 返回值相同或者是其子类
      • 方法名相同
      • 参数相同
      • 父类的静态方法不能被重写为非静态方法(静态方法不能被重写),非静态方法不能重写为静态方法
      • 子类可以定义和父类同名的静态方法,用来覆盖父类的静态方法
      • 父类私有方法不能被重写
      • 不能抛出比父类更多的异常
    3. @Override 注解
      • 会校验父类是否含有该方法
      • 没有注解就不会校验父类是否有该方法
    4. 重写 & 重载

名称     位置    访问修饰符    返回类型    方法名   参数

重写     子类    不能严于父类  相同或子类   相同    相同

重载      同类   无关           无关         相同    不同

    1. toString();
    2. 重写equals
      • 首先判断对象是否是自己
        1. this==obj
      • 判断参数对象是不是和当前对象是同一个类
        1. this.getClass().equals(obj..getClass())
        2. obj instanceof 类名  
      • 将对象强转为当前对象类型

java.lang.ClassCastException:可能会出现的异常)(第二步必不可少

      • 判断对象具体属性值(自定义)
    • equals()  &&   ==  区别

 

      • ==
        1. 如果比较的是基本数据类型,比较的值;
        2. 如果比较的是引用数据类型,比较的地址;
      • equals()
        1. 如果不被重写,和== 没有区别
        2. 如果被重写 (看重写的规则是什么)

 

    1. String ss=new String(”aa”);  创建了几个对象?
        1. 一个或者2个
        2. 如果字符串常量缓冲区存在aa ,就创建一个
        3. 如果字符串常量缓冲区不存在aa ,就创建两个对象
    2. 多态
      • 同一个引用类型,指向不同的实例对象执行不同的操作
    3. 抽象类,抽象方法
      • 抽象类,抽象方法用abstract  修饰  
      • 抽象类不可以实例化
      • 抽象方法没有方法体
      • 抽象方法只能在抽象类中(有抽象方法的类一定是抽象类)
      • 抽象方法必须被子类实现,除非子类也是抽象类(如果子类也是抽象类,抽象方法可以不实现)
    4. 向上转型
      • 语法

<父类类型> 引用名 = new  <子类类型>();

      • 父类的引用调用的方法是子类重写父类的方法,或者继承父类的方法
        1. 如果子类没有XXX方法就调用父类的方法XXX 方法
        2. 如果子类重写了XXX 方法就调用子类的XXX方法
      • 父类不能调用子类特有的方法
    • 向下转型
      • 语法
        1. <子类类型> 对象名=  <父类类型>引用名;
      • 向下转型需要强转
      • 在向下转型中,如果没有转换为真实的子类类型 ,会出现异常

java.lang.ClassCastException: pet.Penguin cannot be cast to pet.Dog

    1. 多态的必要条件
      • 继承
      • 重写
      • 向上转型
    2.  java 面向对象的特征
      • 封装
      • 继承
      • 多态(抽象)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值