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


    在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());
        }
    }
    
  • 相关阅读:
    python—logger
    print默认在末尾添加一个换行符,但其实也可以不用!
    Python做int()强制类型转换的时候,小数是如何取舍的?
    Python基础之好玩的字符串格式化f-string格式
    【奔走相告】- Github送福利:用户可免费创建私有代码库啦
    我30岁了,转行学编程可以吗? 排除法告诉你答案
    Python基础之好玩的字符串格式化之类C风格
    Python基础之白话说函数
    变量 和 注释
    什么是编程语言,什么是Python解释器
  • 原文地址:https://www.cnblogs.com/mediocreWorld/p/16154736.html
Copyright © 2020-2023  润新知