【发布时间】:2020-04-16 20:48:12
【问题描述】:
我试图了解重载和覆盖静态和非静态方法的工作原理。事实上,我试图了解这些方法通常如何出现在父类和子类中。我想出了以下规则:
- 我们不能覆盖静态方法,而是隐藏它们。通过隐藏,我们的意思是在编译时根据引用变量类型决定执行哪个方法,这与覆盖不同(在运行时根据实例类型选择执行哪个方法)。
例如让class B extends A,然后static B.method()隐藏static A.method()。 - 我们可以覆盖实例方法。
例如B.method()覆盖A.method()。 - 具有相同签名的两个或多个方法不能以静态或非静态的任何组合存在于同一类中。
例如B不能同时包含static method(float)和method(float)。 - 两个或多个具有不同签名的方法可以以静态或非静态的任意组合存在于同一个类中。
例如B可以包含static method()、static method(int)和method(float) - 静态方法不能覆盖非静态方法。
例如B.method()不能覆盖static B.method() - 非静态方法不能覆盖静态方法。
例如static B.method()不能覆盖B.method()
我对这些观察是否正确?我也错过了任何规则吗?
【问题讨论】:
标签: java