目录
1.方法重写
1)什么是方法重写
2)方法重写规则
3)为什么要重写
2.Object类
1)Object类是所有类的父类
2)toString()
3)equals()
3.例题
1.方法重写
1)什么是方法重写
子类根据需求对从父类继承的方法进行重新编写
重写时,可以用super.方法的方式来保留父类的方法
构造方法不能被重写
2)方法重写规则
①该类的子类中
②方法名相同
③参数列表相同
④返回值类型相同或者是其子类
⑤访问权限不能严于父类
⑥父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
⑦子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(注:静态方法中无法使用super)
⑧父类的私有方法不能被子类覆盖
⑨不能抛出比父类方法更多的异常
3)为什么要重写
父类的方法不满足子类的需求,就需要重写方法。
2.Object类
1)Object类是所有类的父类
2)toString()
2)toString()
①重写:
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + "}";
}
②为什么要重写toString()方法?
若不重写toString,输出的则是:包名.类名.@.hash码值,是地址;若重写之后则输出对象本身的值。
3)equals()
①Object类的equals()方法与==没区别
②当有特殊需求,如认为属性相同即为同一对象时,需要重写equals()
public boolean equals(Student student){
if (student.getId()==this.getId()&&student.getName().equals(this.getName())&&student.getAge()==this.getAge()){
return true;
}else{
return false;
}
}
③为什么要重写equals()方法?
“==”表示比较两个基本数据类型,“equals”表示比较两个对象。若不引入object类的equals方法,则输出为对象的地址,而引入以后则输出对象的值。
④Java.lang.String重写了equals()方法,把equals()方法的判断变为了判断其值。
3.例题
一个学生类,属性有学号,姓名,年龄,创建对象并且调用重写后的toString()。
当两个学生学号,姓名,年龄相同就认为是同一个对象,重写equals(),使用此方法进行判断两个学生信息。
package com.encapsulation.day19.demo03;
public class Student {
private int id;
private String name;
private int age;
public Student() {
}
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + "}";
}
public boolean equals(Student student){
if (student.getId()==this.getId()&&student.getName().equals(this.getName())&&student.getAge()==this.getAge()){
return true;
}else{
return false;
}
}
}
package com.encapsulation.day19.demo03;
public class StudentTest {
public static void main(String[] args) {
Student student1 = new Student(1001,"张三",22);
System.out.println(student1.toString());// Student{id = 1001, name = 张三, age = 22}
Student student2 = new Student(1002,"李四",23);
System.out.println(student2.toString());// Student{id = 1002, name = 李四, age = 23}
Student student3 = new Student(1001,"张三",22);
System.out.println(student3.toString());// Student{id = 1001, name = 张三, age = 22}
boolean result1 = student3.equals(student1);
System.out.println(result1);// true
}
}



