重写
子类包含于父类同名的方法的现象被称为方法重写( override),也被称为方法覆盖。可以说子类重写了父类的方法,也可以说子类覆盖了父类的方法。
方法重写的规则–“两同两小一大”
- 两同:方法名相同,形参列表相同;
- 两小:子类方法的返回值类型应比父类方法返回值类型更大或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
- 一大:指的是子类方法的访问权限应比父类方法的访问权限更大或相等;
注意:
1、覆盖方法和被覆盖方法,只能是实例方法不能是类方法。
2、当子类覆盖了父类的方法后,子类的对象将无法访问父类中覆盖的方法。
3、但可以在子类方法中调用父类中被覆盖的方法。如果需要在子类中调用父类中被覆盖的方法,则可以使用super调用被覆盖的实例方法,以及使用父类类名调用父类中被覆盖的类方法。
4、如果父类方法具有private访问权限,则该方法是对其子类是隐藏的,因此其子类无法访问该方法,也就无法重写该方法。(如果子类中定义了一个与父类private方法具有相同的方法名、相同的形参列表、相同的返回值类型的方法,依然不是重写只是在子类中重新定义了一个新方法。)
super限定词
1、super用于限定该对象调用它从父类继承得到的实例变量或方法。
2、super不能出现在static修饰的方法中。
3、如果在构造器中使用super,则super用于限定该构造器初始化的是该对象从父类继承得到的实例变量,而不是该类自己定义的实例变量。
4、如果子类定义了和父类同名的实例变量,则会发生子类实例变量隐藏父类实例变量的情形。在子类定义的实例方法中可以通过super来访问父类中被隐藏的实例变量。
super作用
super关键字的用法有三种:
1、在子类的成员方法中访问父类的成员变量;
2、在子类的成员方法中访问父类的成员方法;
3、在子类的构造方法中访问父类的构造方法;