栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于子类能不能重写父类的静态方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于子类能不能重写父类的静态方法

答案:不能 解释:

(先看代码)

父类 Father.java:

public class Father {

    public static String test = "父类static变量";

    public static void test(){
        System.out.println("这是父类 public static void方法");
    }

}
复制代码

子类 Son.java 继承父类

public class Son  extends Father {
    public static String test = "子类static变量";

    public static void test(){
        System.out.println("子类static方法");
    }

}
复制代码

二儿子 Son2.java 也继承父类

public class Son2 extends Father {

    public static String test = "二儿子static变量";

    public static void test() {
        System.out.println("二儿子static方法");
    }
}
复制代码

主程序类 Application.java:

public class Application {
    public static void main(String[] args) {
        Father father = new Father();
        Son son = new Son();
        Son2 son2 = new Son2();

        System.out.println(father.test);
        System.out.println(son.test);
        System.out.println(son2.test);
        System.out.println("------------------------------");
        father.test();
        son.test();
        son2.test();

        Father.test();
    }
}
复制代码

输出结果:

分析

上面子类看似重写了父类的static方法,但其实是各自都开辟了一个空间,各自有各自的方法体(前面博客有说到,静态的东西都是属于类的,一个类只有一个空间专门放静态的东西),所以输出的结果不同。

但是子类不"重写"父类static方法时会继承,验证过了,在主程序类中可以用子类对象直接调用父类的静态变量和方法,打印的就是父类写的内容。

总结

所以子类可以继承父类的静态方法,但不能重写,之所以显示不同结果,是因为子类也开辟了一个空间去放自己的静态变量和方法,此时相当于写了一个子类独有的方法,只是它是用static修饰的。

关于这一点的证明:在子类中,在"重写"的static方法前面加注解 @Override,此时会直接编译报错:

翻译为“方法不重写其超类中的方法”,大意就是该方法没有从父类方法中重写。 所以说明这个方法不是在重写,而是子类自己的,独有的,只是跟父类那个static方法(test)同名了而已。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667157.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号