首页 > 解决方案 > 在 Java 中重载和覆盖静态和非静态方法

问题描述

我试图了解重载和覆盖静态和非静态方法的工作原理。事实上,我试图了解这些方法通常如何出现在父类和子类中,也不能出现在父类和子类中。我想出了以下规则:

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

我对这些观察结果正确吗?我也错过了任何规则吗?

标签: java

解决方案


规则 :

  • Polymorphism适用于覆盖,而不是重载。
  • Overriding是运行时概念,而重载是编译时概念。

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

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


推荐阅读