我试图了解重载和重写静态和非静态方法是如何工作的。事实上,我试图了解这些方法如何能够和不能出现在一般的父类和子类中。我想出了以下规则:
- 我们不能覆盖静态方法,但可以隐藏它们。通过隐藏,我们的意思是在编译时根据引用变量类型决定执行哪个方法,这与覆盖(根据实例类型在运行时选择执行哪个方法)不同。
例如让类 B 扩展 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()
我的这些观察结果正确吗?我还错过了什么规则吗?
最佳答案
规则:
多态性
适用于覆盖,而不是重载。重写
是一个运行时概念,而重载是一个编译时概念。
多态性->
真实对象类型@runtime(而不是引用变量的类型)决定使用哪个overridde
方法。相反,引用类型决定在编译时使用哪种重载
方法。
关于静态方法: 它们不能被重写,但可以在 Java 中重载和隐藏
关于java - Java中静态和非静态方法的重载和重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61249712/