ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基础:记住,Java的static方法无法被重写,也没必要

2022-04-17 00:00:30  阅读:144  来源: 互联网

标签:调用 静态方法 子类 static SuperClass m2 Java 父类 重写


在Java中,静态(static)方法,是属于类方法,可以通过类直接调用,当然也可以通过实例对象进行调用,但不建议,也没必要。
相应的,有静态变量,属于类变量。

注意:

  1. 静态方法是无法被重写(Override)的,如果强行加上 @Override 注解,编译时会报错 “java: 方法不会覆盖或实现超类型的方法”
    原因:重写的作用是为了父类和子类的相同签名的方法,具有不同的行为,从而实现了 多态 。但是静态方法是被类直接调用的,和对象无关,不存在父子类对象之间的相同方法不同行为,所以也没有多态。

  2. 子类可以直接调用父类的静态方法。
    虽说子类无法重写父类的静态方法,但是却可以直接调用父类的静态方法,调用方式是 子类名.父类静态方法() ,当然,也可以 子类对象.父类静态方法(),不过没必要,也不建议。

经过亲测。测试代码如下:

// 省略 package

public class SuperClass {

    public String m1() {
        return "a1";
    }

    public static String m2() {
        return "a2";
    }

    static class SubClass extends SuperClass {

        @Override
        public String m1() {
            return "b1";
        }

        /* @Override 添加该注解后报错:Method does not override method from its superclass(方法不会覆盖或实现超类型的方法)
         public static String m2() {
            return "b2";
        }
         */
    }

    public static void main(String[] args) {

        // 按照习惯,应该命名为superClass。之所以命名为 superC,是为了更清楚地区分 子类名称 和 子类对象名称
        SuperClass superC = new SuperClass();
        // 父类对象 调用 普通方法 m1()
        System.out.println(superC.m1());
        // 父类 调用 静态方法 m2()
        System.out.println(SuperClass.m2());
        // 父类对象 调用 静态方法 m2(),可以,但没必要,不建议
        System.out.println(superC.m2());

        // 按照习惯,应该命名为subClass。之所以命名为 subC,是为了更清楚地区分 子类名称 和 子类对象名称
        SuperClass subC = new SubClass();
        // 子类对象 调用被重写的 普通方法 m1()
        System.out.println(subC.m1());
        // 子类 调用 静态方法 m2(),其实是父类的 m2() 的行为
        System.out.println(SubClass.m2());
        // 子类对象 调用 静态方法 m2(),可以,但没必要,不建议
        System.out.println(subC.m2());
    }
}

标签:调用,静态方法,子类,static,SuperClass,m2,Java,父类,重写
来源: https://www.cnblogs.com/mediocreWorld/p/16154736.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有