一、方法的重写或方法的覆盖(overriding)
1、子类根据需求对从父类继承的方法进行重新编写
2、重写时,可以用super。方法来保留父类的方未能
3、构造方法不能重写
二、方法重写的规则
1、方法名相同
2、参数列表相同或者是其子类
3、返回值类型相同或者是其子类
4、访问权限不能严于父类
5、父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
6、子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态态方法 PS:静态方法中无法使用super
7、父类的私有方法不能被子类覆盖
8、不能抛出比父类方法更多的异常
三、重写equals方法
写一个带名字和年龄的猫类,创建两个对象,对比是否相同
package java_2019_1_19; //猫类 public class Cat { private String name; private int age; public Cat() {} public Cat(String name, int age) { this.name = name; this.age = age; } 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; } @Override
//重写equals对比方法,如果两个对象的名字和年龄一样即为相同 public boolean equals(Object arg) { if(arg instanceof Cat) { Cat a = (Cat)arg; if(a.name.equals(this.name)&&a.age==this.age) { return true; } } return false; } }
package java_2019_1_19; //测试 public class Test { public static void main(String[] args) { Cat a1 = new Cat("小白",16); Cat a2 = new Cat("小白",16); System.out.println(a1.equals(a2)); } }
结果示例: