今天在梳理梳理知识点的时候无意间看到一个问题:
子类是否可以继承父类的的static方法?
子类是否可以重写父类的静态方法而呈现多态特性?
static特点
对象数据共享 ->被static修饰的数据不仅可以被对象访问,还可以被类名访问
- static是一个修饰符,用于修饰成员,(成员变量,成员函数)
- static优先于对象存在,因为static的成员随着类的加载就已经存在
- static修饰的成员多了一种调用方式,可以被类名调用(类名.静态成员)
- static修饰的数据是共享数据,对象中的存储是特有数据 -
父类代码
public class Father {
public static void show() {
System.out.println(" 父类的静态方法");
}
public static void method() {
System.out.println("父类的method静态方法");
}
}
子类代码
public class Son extends Father{
public static void show() {
System.out.println("子类的静态方法 ");
}
public static void main(String[] args) {
Father father = new Son();
father.show();//是否重写父类静态方法,表现多态性
Son son = new Son();
son.show();
son.method();//是否继承父类静态方法
}
}
输出结果
父类的静态方法
子类的静态方法
父类的method静态方法
分析
1.father.show();//是否重写父类静态方法,表现多态性
-打印结果是“父类的静态方法 ”,可以看出子类不可以重写父类的静态方法show(),因此依旧表现出父类方法的行为特征,而没有表现出子类方法的行为特征,因此没有表现出多态性。
2.子类和父类中同名的static变量和方法都是相互独立的,并不存在任何的重写的关系
3.可以看出 子类继承了父类的static方法method
结论
子类可以继承父类静态属性和静态方法,但是不可以重写父类的静态方法而表现多态性
PS:前提是父类的静态方法对子类是可见的。eg,父类方法不被private休息