方法重写(学习笔记)
什么是方法重写?
- 在子父类中, 如果出现了一模一样的方法, 这种现象称之为方法重写。
- 注意:重写后,方法的访问,会使用子类方法 。
什么情况下需要对父类的方法重写?
- 当父类的方法满足不了子类需求, 子类就可以对父类的方法进行重写;
- 重写小技巧:使用@Override注解,他可以指定编译器,检查我们重写的方法是否合格,可读性更好;
- 方法之间必须有子父类之间的关系,方法的参数类型和返回值类型需一致;
- 子类重写父类方法时候,子类的访问权限必须等于或小于父类方法的访问权限;
- 私有方法、静态方法无法重写。
重写equals方法和toString方法
创建一个Student类
import java.util.Objects;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 重写equals方法的目的就是为了比较对象的内容
*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
/**
* public String toString() 将对象的地址转成一个字符串。
* public boolean equals(0bject o)判断两个对象是否相等。
* protected object clone()对象克隆
*/
/**
* 因为Object类中的toString() 是将对象的地址转成字符串 , 所以最终打印也是对象的地址
* 那么这种情况满足不了子类的需求
*
* 以后只要是编写一个模板类 就建议重写 toString()方法
* 重写的目的: 是为了展示对象的内容
*/
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
创建一个测试类StudentTest
/**
* 演示 equals方法
*/
public class StudentEqualsTest {
public static void main(String[] args) {
//创建一个学生对象
Student s1 = new Student("张三",19);
Student s2 = new Student("张三",19);
//调用equals方法进行比较
boolean rs = s1.equals(s2); //重写之后就是true 否则是false
System.out.println(rs);
//System.out.println(s1 == s2); //false
//创建学生对象
Student s3 = new Student();
//输出语句 只要是打印对象名 其实都会在源码的底层 默认的调用Object类的toString方法
System.out.println(s3); //com.heima.d3_object.demo1.Student@1b6d3586
System.out.println(s3.toString()); //com.heima.d3_object.demo1.Student@1b6d3586
//调用toString()
String s4 = s3.toString(); //com.heima.d3_object.demo1.Student@1b6d3586
System.out.println(s4);
}
}