在Java中子类继承父类,父类可能有:静态变量、实例变量、静态方法、实例方法。
当子类定义相同静态变量、实例变量、静态方法、实例方法时,思考一下,会是怎样的结果?
举例如下:
public class Parent {
public static int s = 0; //静态变量
public int n = 1; //实例变量
public static int m1() { //静态方法
return 2;
}
public int m2() { //实例方法
return 3;
}
}
public class Son extends Parent{
public static int s = 9999;
public int n = 1111;
public static int m1() {
return 2222;
}
@Override
public int m2() {
return super.n; //调用父类实例变量n
}
public static void main(String[] args) {
Son son = new Son();
System.out.println(son.n); //调用子类实例变量n
System.out.println(son.m2()); //调用子类实例方法m2,该方法重写覆盖了父类
System.out.println(s); //调用子类静态变量s
System.out.println(Parent.s); //调用父类静态变量s
System.out.println(m1()); //调用子类静态方法m1
System.out.println(Parent.m1()); //调用父类静态方法m1
}
}
结果如下:
可以得出结论:
当子类中定义了与父类相同的静态变量、实例变量或静态方法,并不会覆盖父类,而是同时存在,不过父类对应的静态变量、实例变量或静态方法被自动隐藏。
当子类中定义了与父类相同的实例方法,则会覆盖父类对应的实例方法,这称为重写。