继承性的主要特征是子类可以根据父类已有的功能进行功能的扩展,但是在子类定义属性或方法的时候有可能出现定义的属性或方法与父类同名的情况,这样的操作就称为覆写。
方法的覆写:
Ø 当子类定义了和父类在方法名称、返回值类型、参数类型及个数完全相同的方法的时候,称为方法的覆写。
Ø 覆写方法的返回类型要一致
class A {
public void fun() { // 在父类中定义的方法
System.out.println("A类中的fun()方法。") ;
}
}
class B extends A { // 定义子类,此时没有覆写任何方法
public void fun() { // 此处为覆写
System.out.println("B类中的fun()方法。") ;
}
}
public class TestDemo {
public static void main(String args[]) {
B b = new B() ; // 实例化子类对象
b.fun() ; // 调用fun()方法,此时方法被覆写所以调用被覆写过的方法
}
}
覆写规定
Ø 在覆写的过程之中,还必须考虑到权限问题,即:被子类所覆写的方法不能够拥有比父类更严格的访问控制权限。
Ø 对于访问控制权限实际上已经给读者讲解过过三种了,这三种权限由宽到严的顺序是:public > default(默认,什么都不写) > private,也就是说private的访问权限是最严格的(只能够被一个类中所访问)。即:如果父类的方法使用的是public声明,那么子类覆写此方法的时候只能是public,如果父类的方法是default(默认)的话,那么子类覆写方法的时候只能使用default或public。
class A {
public void fun() { // 在父类中定义的方法
System.out.println("A类中的fun()方法。") ;
}
}
class B extends A { // 定义子类,此时没有覆写任何方法
// 父类中的fun()方法权限为public,此时子类中的方法权限并没有变得严格,而是与父类一致
public void fun() { // 此处为覆写
System.out.println("B类中的fun()方法。") ;
}
}
public class TestDemo {
public static void main(String args[]) {
B b = new B() ;// 实例化子类对象
b.fun() ; // 调用fun()方法,此时方法被覆写所以调用被覆写过的方法
}
}
一旦有了覆写之后会发现,默认情况下子类所能够调用的一定是被覆写过的方法。为了能够明确的由子类调用父类中已经被覆写的方法,那么可以使用“super.方法()”来进行访问。
class A {
public void print() {
System.out.println("ww") ;
}
}
class B extends A {
public void print() { // 覆写的是print()方法
super.print(); // 访问父类中的print()方法
System.out.println("aa") ;
}
}
public class TestDemo {
public static void main(String args[]) {
B b = new B() ; // 实例化子类对象
b.print() ;
}
}