Java基础:记住,Java的static方法无法被重写,也没必要
在Java中,静态(static)方法,是属于类方法,可以通过类直接调用,当然也可以通过实例对象进行调用,但不建议,也没必要。
相应的,有静态变量,属于类变量。
注意:
-
静态方法是无法被重写(Override)的,如果强行加上 @Override 注解,编译时会报错 “java: 方法不会覆盖或实现超类型的方法”。
原因:重写的作用是为了父类和子类的相同签名的方法,具有不同的行为,从而实现了 多态 。但是静态方法是被类直接调用的,和对象无关,不存在父子类对象之间的相同方法不同行为,所以也没有多态。 -
子类可以直接调用父类的静态方法。
虽说子类无法重写父类的静态方法,但是却可以直接调用父类的静态方法,调用方式是 子类名.父类静态方法() ,当然,也可以 子类对象.父类静态方法(),不过没必要,也不建议。
经过亲测。测试代码如下:
// 省略 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()); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理