java - Java中静态和非静态方法的重载和重写

标签 java

我试图了解重载和重写静态和非静态方法是如何工作的。事实上,我试图了解这些方法如何能够和不能出现在一般的父类和子类中。我想出了以下规则:

  1. 我们不能覆盖静态方法,但可以隐藏它们。通过隐藏,我们的意思是在编译时根据引用变量类型决定执行哪个方法,这与覆盖(根据实例类型在运行时选择执行哪个方法)不同。
    例如让类 B 扩展 A,然后 static B.method() 隐藏 static A.method()
  2. 我们可以重写实例方法。
    例如B.method() 覆盖 A.method()
  3. 具有相同签名的两个或多个方法不能以静态或非静态的任意组合存在于同一类中。
    例如B 不能同时包含static method(float)method(float)
  4. 具有不同签名的两个或多个方法可以以静态或非静态的任意组合存在于同一类中。
    例如B 可以包含 static method()static method(int)method(float)
  5. 静态方法不能覆盖非静态方法。
    例如B.method() 无法覆盖 static B.method()
  6. 非静态方法不能覆盖静态方法。
    例如static B.method() 无法覆盖 B.method()

我的这些观察结果正确吗?我还错过了什么规则吗?

最佳答案

规则:

  • 多态性适用于覆盖,而不是重载。
  • 重写是一个运行时概念,而重载是一个编译时概念。

多态性-> 真实对象类型@runtime(而不是引用变量的类型)决定使用哪个overridde方法。相反,引用类型决定在编译时使用哪种重载方法。

关于静态方法: 它们不能被重写,但可以在 Java 中重载隐藏

关于java - Java中静态和非静态方法的重载和重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61249712/

相关文章:

java - Spring 在手动类实例化期间注入(inject)@Autowired 字段

java - 打开电子邮件客户端,并将 JFreeChart 的图表(图像)粘贴到正文中

java - 使用 ActiveMQ 创建持久主题和订阅者 spring boot jms

java - 枚举作为一个类(class)?

java - 圆周率误差

java - 从 CLI 解锁 Redis 锁

java - 检查作业状态:Mapreduce作业

java - MySQL 中的 REGEXP 返回不需要的值

java - 是否需要同步读取变量?

java - 如果失败或不稳定,构建函数不会返回构建对象