子类定义了与父类相同的方法和属性时,进行覆写。
1.方法的覆写
指的是子类定义了与父类方法名称、参数类型及个数完全相同的方法。被覆写的方法不能比父类有更为严格的访问条件。
范例:简单方法的覆写
class Person {
public void printInfo(){
System.out.println("1.Person类 printInfo方法");
}
}
class Student extends Person {
public void printInfo(){
System.out.println("2.Student类 printInfo方法");
}
}
public class TestDemo{
public static void main(String args[]){
Student stu = new Student();
stu.printInfo();
}
}
结果:2.Student类 printInfo方法
进行覆写方法使用的时候,管住以下两点,当前使用的对象是通过哪个类new的,调用该对象的方法,如果该对象被子类覆写了,那么调用的一定是子类的方法。
但是在进行方法覆写时,被覆写的方法不能比父类有更为严格的访问控制条件。
private <default<public
意味着父类的方法使用了public 权限,子类只能是public权限
父类的方法使用了default权限,子类可以用default和public。
结论:以后方法就写public,至少能保证在大部分情况下都是正确的;
同时以后属性就写private ;
问题:父类中的方法用private,子类中的方法可以是public吗?
如果父类中的方法用private修饰,子类是不知道的,因此子类的public只是自己定义的新方法。
重载与重写的区别
重载:方法名称相同,参数类型,参数个数不同,通常在一个类中,通常返回值类型相同,没有权限要求
重写:方法名称,参数类型,参数个数相同,用在子类继承父类
2.属性的覆写
类中所有的属性都是用private封装,子类根本不知道父类属性的存在,所以属性的覆写没有意义。
在编写程序时,不要使变量重名。
3.super关键字
super():由子类调用父类的构造方法时使用
在覆写时也可以使用super.方法调用父类方法
this.方法 先从本类中调用方法,如果本类中没有再从父类中的方法。本类的访问操作。并且this可以表示当前对象
super.方法 直接调用父类中的方法。子类访问父类的操作。
1.子类方法的覆写是因为父类方法的功能不足,才需要覆写。
2.方法覆写时使用的就是public权限,将父类的方法名称直接粘贴过来最简单不容易出错。