重写(覆写)方法

总结

方法覆写(重写/Override)

  • 方法覆写作用

    保证业务逻辑合理性

  • 方法覆写语法

    直接将父类中要重写的方法复制到子类后,重写方法体即可

  • 方法覆写注意事项

    1. 并不是每一个继承过来的方法都要重写。
    2. 并不是每一个子类都要重写父类继承过来的方法。
  • super 关键字

    在子类中的某一个方法中需要去调用父类中被覆盖的方法,此时得使用 super 关键字。

    public class Ostrich extends Bird{ 
    public void fly() { 
    System.out.println("扑扑翅膀,快速奔跑..."); 
    }
    
    public void say() { 
    super.fly();//调用父类被覆盖的方法 
    fly();//调用本类中的方法 
    } 
    } 
    

    如果调用被覆盖的方法不使用 super 关键字,此时调用的是本类中的方法。
    super 关键字表示父类对象的意思,更多的操作,后面再讲。
    super.fly()可以翻译成调用父类对象的 fly 方法。

抽象类和抽象方法

抽象方法

  • 抽象方法:没有方法体,且用abstract修饰的方法
  • 语法:修饰符 abstract 返回值类型 方法名(…);
  • 抽象方法作用:为了保证业务逻辑合理性,强制子类根据自己的需求,重写方法。

抽象类

  • 抽象类:就是用abstract修饰的类。
  • 抽象类作用:就是用来装抽象方法的。
  • 语法:命名一般类名AbstractXxx
修饰符 abstract class AbstractXxx{
实例变量
    类变量
    实例方法
    类方法
    构造方法  // 语法规定:抽象类不能创建对象。只能在子类中通过super使用
    抽象方法:修饰符 abstract 返回值类型 方法名(...);
}
  • 抽象类的使用场景:

    一般作为业务父类(基类,模板类),且业务父类中,有的方法需要所有子类强制重写。

Object类(及方法覆写的应用)

  • 概念

    类 Object 是类层次结构的根类,每个类都使用 Object 作为超类。

    所有对象(包括数组)都可以调用到Object中的方法;

  • Object类中方法

    1. int hashCode() 返回对象的哈希码值。
    2. boolean equals(Object obj) 根据实际业务,判断两个对象成员变量的值是不是“相等”,不是直接判断==
      判断当前对象和obj参数地址是否"相等",要比较什么类型的对象就用重写其对应类型的equals方法。
      例如:
      两个学生,我们认为成员变量:姓名和电话号码相同就是同一个人,就用重写学生类的equals方法。
      两个教师,我们认为成员变量:身份证号相同就是同一个人,就用重写教师类的equals方法。
    3. String toString() 返回对象的字符串表示形式。如果需要打印对象的制定格式,则需要重写当前对象所对应类的toString方法即可 。
    4. Class getClass() 返回此 Object的运行时类,即当前对象所对应的字节码文件。
      (反射时重点讲)字节码文件用==比较(了解)
  • 方法覆写

    • toString方法

          @Override
          public String toString() {
              return "Person{" +
                      "name='" + name + '\'' +
                      ", gender='" + gender + '\'' +
                      ", age=" + age +
                      '}';
          }
      
    • equals

          @Override
          public boolean equals(Object o) {
              if (this == o) return true;
              if (o == null || getClass() != o.getClass()) return false;
              Person person = (Person) o;
              return age == person.age && Objects.equals(name, person.name) && Objects.equals(gender, person.gender);
          }
      
    • hashCode

          @Override
          public int hashCode() {
              return Objects.hash(name, gender, age);
          }
      }
      
  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值