关于子类能不能继承和重写父类的静态成员变量和静态成员方法
-
子类可以继承父类的静态成员变量和静态成员方法
// 父类 public class Father { // 父类的静态成员变量age public static int age = 18; // 父类的静态成员方法print() public static void print() { System.out.println("我是父类的print()方法!"); } }
// 子类 public class Son extends Father { // 空 }
// 测试类 public class Test { public static void main(String[] args) { // 使用子类调用静态成员属性并打印 System.out.println("子类调用静态成员属性age:" + Son.age); // 使用子类调用静态成员方法 System.out.print("子类调用静态成员print()方法:"); Son.print(); } }
输出结果: 子类调用静态成员属性age:18 子类调用静态成员print()方法:我是父类的print()方法!
我们会发现子类调用父类的静态成员属性和静态成员方法都成功了!
所以是可以继承的!!!
-
子类不可以重写父类的静态成员变量和静态成员方法
// 父类 public class Father { // 父类的静态成员变量age public static int age = 18; // 父类的静态成员方法print() public static void print() { System.out.println("我是父类的print()方法!"); } }
// 子类 public class Son extends Father { // 试图重写父类的静态成员变量age public static int age = 22; // 试图重写父类的静态成员方法print() public static void print() { System.out.println("我是子类的print()方法!"); } }
// 测试类 public class Test { public static void main(String[] args) { // 使用子类调用静态成员属性并打印 System.out.println("子类调用静态成员属性age:" + Son.age); // 使用父类调用静态成员属性并打印 System.out.println("父类调用静态成员属性age:" + Father.age); // 使用子类调用静态成员方法 System.out.print("子类调用静态成员print()方法:"); Son.print(); // 使用父类调用静态成员方法 System.out.print("父类调用静态成员print()方法:"); Father.print(); } }
输出结果: 子类调用静态成员属性age:22 父类调用静态成员属性age:18 子类调用静态成员print()方法:我是子类的print()方法! 父类调用静态成员print()方法:我是父类的print()方法!
我们会发现父类的静态成员属性age和静态成员print()方法并没有被子类覆盖掉,子类调用的是自己本类的静态成员属性age和静态成员print()方法!
所以是不可以重写的!!!
-
另一种判断是否是子类重写父类的方式:使用注解@Override
如上例Son中:
public class Son extends Father { // 试图重写父类的静态成员变量age public static int age = 22; // 试图重写父类的静态成员方法print() // @Override 当此注解放在方法前会报错,说明并不是重写了父类的print()方法 public static void print() { System.out.println("我是子类的print()方法!"); } }