总结
方法覆写(重写/Override)
-
方法覆写作用
保证业务逻辑合理性
-
方法覆写语法
直接将父类中要重写的方法复制到子类后,重写方法体即可
-
方法覆写注意事项
- 并不是每一个继承过来的方法都要重写。
- 并不是每一个子类都要重写父类继承过来的方法。
-
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类中方法
- int hashCode() 返回对象的哈希码值。
- boolean equals(Object obj) 根据实际业务,判断两个对象成员变量的值是不是“相等”,不是直接判断==
判断当前对象和obj参数地址是否"相等",要比较什么类型的对象就用重写其对应类型的equals方法。
例如:
两个学生,我们认为成员变量:姓名和电话号码相同就是同一个人,就用重写学生类的equals方法。
两个教师,我们认为成员变量:身份证号相同就是同一个人,就用重写教师类的equals方法。 - String toString() 返回对象的字符串表示形式。如果需要打印对象的制定格式,则需要重写当前对象所对应类的toString方法即可 。
- 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); } }
-