Java 之 覆写, 重载, 隐藏, 遮蔽, 遮掩

覆写(override) 存在于子类与父类间

一个实例方法可以覆写(override) 在其超类中可以访问到(非private)的具有相同签名的实例方法(非static), 从而使能动态分配(dynamic dispatch) ; 换句话说, VM 将基于实例的运行期类型来选择要调用的覆写方法, 覆写的好处在于子类可以根据需要, 定义特定于自己的行为.
在这里插入图片描述

重载(overload) 存在于类内部

在某个类中的方法可以重载(overload)另一个方法, 只要它们具有相同的名字和不同签名.由调用所指定的重载方法是在编译期选定的.
在这里插入图片描述

隐藏(hide) 存在于子类和父类间

一个属性, 静态方法或内部类可以分别隐藏(hide) 在其超类中可以访问到的具有相同名字(对方法而言就是相同的方法签名)的所有属性, 方法或者内部类. 上述成员被隐藏后, 将阻止其被继承.
方法签名: 方法名称 + 参数类型

在这里插入图片描述

遮蔽 (shadow) 存在于 类内部

一个变量, 方法或类 可以分别 遮蔽(shadow) 在类内部具有相同名字的变量, 方法 或类. 如果一个实体被遮蔽了, 那么就无法用简单名引用到它, 简单名将引用到遮蔽声明中的实体
在这里插入图片描述

遮掩(obscure) 存在于类内部

一个变量可以遮掩具有相同名字的一个类, 只要它们都在同一个范围内:
如果这个名字被用于变量与类都许可的范围, 那么它将引用到变量上.
相似的, 一个变量或一个类型可以遮掩一个包.
遮掩是唯一一种两个名字位于不同的名字空间的名字重用形式, 这些名字空间包括: 变量, 包, 方法 或 类型.
如果一个类或一个包被遮掩了, 那么你不能通过其简单名引用到它, 除非是在这样一个上下文环境中 , 即语法只允许在其名字空间中出现一种名字.
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Beyond_Nothing/article/details/112465710