关于子类能不能继承和重写父类的静态成员变量和静态成员方法
子类可以继承父类的静态成员变量和静态成员方法
// 父类
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()方法!");
}
}



