概念:子类定义与父类相同的方法或属性时,该操作称为覆写
1.方法的覆写(研究抽象类和接口的第一步)
概念:子类定义了与父类方法名称、参数类型及个数完全相同的方法
注意:
- 子类被覆写时不能够拥有比父类更为严格的访问控制权限
- 你当前使用的对象是通过哪个类new的
- 当调用某个方法时,如果该方法已经被子类所覆写,那么调用的一定是被覆写过的方法
举例:
class People{
public void print(){
System.out.println("People类的print方法");
}
}
class Student extends People{
public void print() {
System.out.println("Student类的print方法");
}
}
public class Test {
public static void main(String[] args) {
new Student().print();
}
}
运行结果:
三种访问控制权限:private<default<public
如果父类用public进行方法声明,那么子类必须用public;
如果父类用default进行方法声明,那么子类可用default或public;
如果父类用private进行方法声明,那么久表示该方法只能被父类使用,子类无法使用(即可理解为子类不知道父类有用private声明的方法)。
建议:
- 写方法时,大多数情况下建议使用public
- 写属性时,大多数情况下建议使用private
2.属性的覆写
当子类定义了和父类属性名称完全相同的属性时,称为属性的覆盖
核心:类中的属性都要求使用private封装,一旦封装,子类不知道父类具有什么属性,那么也就不存在属性覆写的问题。
举例:
class People{
public String info = "People";
}
class Student extends People{
//按照就近取用原则,找被覆盖的属性
public String info = "Student";
}
public class Test {
public static void main(String[] args) {
System.out.println(new Student().info);
}
}
运行结果: