为什么下面的代码会打印"MAIN"?

public class Main

{

public static void method()

{

System.out.println("Main");

}

public static void main(String[] args)

{

Main m = new SubMain();

m.method();

}

}

class SubMain extends Main

{

public static void method()

{

System.out.println("SubMain");

}

}

在运行时,m指向Submain的一个实例,因此它在概念上应该打印"submin"。

甚至可以编写Main m = null;,然后调用该方法,在点之前的表达式根本不用。

静态方法根据变量的编译时类型进行解析。m是Main类型,因此调用Main中的方法。

如果将其更改为SubMain m ...,则将调用SubMain上的方法。

除了这个答案,我建议您不要从实例对象调用静态方法,也不要从类名调用它们(例如:submin.method(),而不是m.method())。

这就是为什么Java试图在实例对象上调用静态方法时警告您的原因。

"Erim装修Java不警告你,但你的IDE会警告你。

这是因为静态方法不是多态的。此外,静态方法不应该由对象调用,而应该使用类,即Main.method()或SubMain.method()来调用。当你调用EDCOX1,11时,Java实际上调用EDCOX1×6,因为M是MyType。

如果你想享受多态性,不要使用静态方法。

当我尝试做这种事情时,Eclipse会给我这样的警告:

The static method XXX() from the type XXX should be accessed in a static way

静态方法不参与继承。变量的类型为Main,因此编译器将函数调用解析为Main.method()。

为了增加乐趣,尝试将m设置为null。

Java对静态方法执行早期绑定,不同于动态绑定的实例方法。

因为对象变量的类型是main,所以调用在编译时绑定到超类实现。

这里有一个很好的解释。

静态方法与类名静态绑定,因为m是主类的类型然后在编译之后,它看起来如下主要方法。在你的课程汇编之后运行以下命令JAVAP—C主您可以看到主类的JVM程序集代码你会看到下面m.method//调用静态invoke static,invoke special告诉静态绑定invoke special,invoke接口告诉动态绑定

java中静态方法可以被继承_关于java:静态方法中的继承相关推荐

  1. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  2. .Net 6.0中的新增特性_.Net 6.0中的新增功能

    .Net 6.0中的新增特性_.Net 6.0中的新增功能 一..Net 6 介绍 .NET 6 作为 LTS 长期支持版本,.NET 6 将会获得 3 年的技术支持. .NET 6 是首个原生支持 ...

  3. css如何保留空格,HTML/CSS中的空格处理_如何保留页面中的空格

    html中的空格的规则 在html中内容中的多个空格一般会被视为一个,连续的多个空格符被自动合并了.同时内容前后的空格也会被清除, 如下: fly63 com 显示效果为: fly63 com 备注: ...

  4. amp jsp空格 nps_HTML/CSS中的空格处理\_如何保留页面中的空格【转】

    HTML/CSS中的空格处理\_如何保留页面中的空格[转] HTML中的空格的规则 在html中内容中的多个空格一般会被视为一个,连续的多个空格符被自动合并了.同时内容前后的空格也会被清除, 如下: ...

  5. java中井号字符串_深入Java基础(二)——字符串

    这段时间在准备找一份java实习工作,所以来把基础知识整理归纳一下 文章结构: 1.equals和== 2.字符串的基本知识以及字符串的源码解读: 3.字符串的注意点以及使用推荐: 一.equals和 ...

  6. formdata 接受参数中带有class 对象_浅析JAVA中的反射机制及对Servlet的优化

    今天来聊聊java中的反射机制,工作以后发现很多东西动不动就要使用反射或者动态代理,如果不能很好的理解反射,那么对于动态代理等一些重要的设计模式就会有种不够通透的感觉. 所谓的反射,就是在运行状态中, ...

  7. java中的单例_细说Java中的几种单例模式

    在Java中,单例模式分为很多种,本人所了解的单例模式有以下几种,如有不全还请大家留言指点: 饿汉式 懒汉式/Double check(双重检索) 静态内部类 枚举单例 一.饿汉式 image 饿汉式 ...

  8. java中字符流 字节流_理解Java中字符流与字节流的区别

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...

  9. java中的最终变量_在lambda表达式中使用的变量应该是最终变量或有效的最终变量。...

    A final变量意味着它只能被实例化一次.在Java中,您不能在lambda和匿名内部类中使用非最终变量. 您可以使用旧的for-each循环重构代码:private TimeZone extrac ...

最新文章

  1. 万字总结webpack实战案例配置
  2. BugkuCTF-Reverse题love
  3. vmware player 坑
  4. 数据结构——一些小点
  5. Visio高级使用技巧
  6. 焦作哪里有学机器人编程_焦作自学plc入门梯形图编程去哪学
  7. ArcFace阈值选择
  8. MySQL/Mariadb基准测试工具-TPC,TPCC,TPMC(计算机性能衡量指标)
  9. 【电脑运用及修理】6套台式组装机电脑配置清单大全(2022年618)
  10. java mpeg ps转mpeg-4_MPEG4格式转换器下载_枫叶MPEG4格式转换器(MPEG转换器) 9.0.5.0 共享版_极速下载站...
  11. 【引用】男人爱你的三个细节
  12. 英语口语收集(十五)
  13. Servlet判断用户是否登陆过、异地登录和登出功能
  14. 1024程序员节日,祝愿所有的程序员节日快乐
  15. chrome扩展程序_如何实施Chrome扩展程序
  16. Mac配置item2高亮颜色
  17. 使用Termux把Android手机变成SSH服务器
  18. 【matplotlib】散点图详解
  19. 搜索 php源码,影视搜索php源码
  20. 居家学习:新冠肺炎疫情下中国高校基于直播的远程教育体验的混合方法分析

热门文章

  1. 大规模数据处理Apache Spark开发
  2. 反应式系统实现MQTT客户机
  3. 驾驶员行为监控系统:需要它来管理车队
  4. CUDA C 纹理提取Texture Fetching
  5. ISP算法高水平分析(上)
  6. 无人驾驶传感器融合技术
  7. ADAS摄像头图像环视拼接算法
  8. 2021年大数据Flink(十):流处理相关概念
  9. [JS] [C] [编程题] 用户喜好
  10. HarmonyOS UI 开发 vp ,fp , px 以及写具体数字的 理解