Java覆写、重载、隐藏、遮蔽、遮掩

1.覆写(Override)方法
定义: 一个实例方法可以覆写在其超类中可以访问到的具有相同签名的所有实例方法,从而使得动态分配成为可能;也就是说,JVM会给予实例的运行期类型来选择要调用的覆写方法。覆写是面向对象编程技术的基础,并且是唯一没有被普遍劝阻的名字重用形式,覆写也称为重写。
覆写用在子类在继承父类时,覆写(重新实现)父类中的方法,重写(覆盖)的规则:

   a.  重写方法的参数列表必须与被重写的方法的完全相同;
   b. 被重写的方法的方位修饰符不能为private,否则在其子类中只是新定义了一个方法,因为父类中的方法是私有化的
   c. 重写方法的访问修饰符一定要大于或等于被重写方法的访问修饰符(public>protected>default>private);
   d. 重写的方法的返回值必须和被重写的方法的返回一致;
   e. 重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
   示例代码:
    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return this.num.hashCode();
    }

2.重载(Overload)方法(包括构造方法)
定义:就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
一般是用于在一个类内实现若干重载的方法,方法名相同而参数形式不同,重载的规则:
(1).在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
(2).不能通过访问权限、返回类型、抛出的异常进行重载;
(3).方法的异常类型和数目不会对重载造成影响。

3.隐藏(hide)字段、静态方法、成员类型
定义:一个字段、静态方法(静态方法无法动态绑定)或成员类型可以分别隐藏在其超类中可访问的具有相同名字(对方法而言就是相同的方法签名)的所有字段、静态方法或成员类型。隐藏一个成员将组织其被继承。

Translation:一个域、静态方法或成员类型可以分别隐藏其超类的可访问到的相同名字的域、静态方法或成员类型。

示例代码:
这里写图片描述
运算结果为:
Tom
show in A
show in B

4.遮蔽(shadow)
当一个声明遮蔽了另一个声明时,简单名将引用到遮蔽声明中的实体
最容易产生的遮蔽:局部变量与成员变量同名时。
一种最常见的遮蔽: 构造方法中参数名与成员名相同时
示例代码:

public class CompanyMessage {
    private String num;
    private String name;
    private int age;

    public CompanyMessage(String num, String name, int age) {
        this.num = num;
        this.name = name;
        this.age = age;
    }
}

5.遮掩(obscure)

定义:遮掩是指两个名字位于不同的名字空间的名字重用形式,名字空间包括:变量、包、方法或类型。
一个变量可以遮掩具有相同名字的一个类型,只要它们都在同一个范围内;
一个变量或一个类型可以遮掩一个包。
遮蔽与遮掩非常相像,二者的关键区别是一个声明只能遮蔽类型相同的另一个声明:一个类型声明可以遮蔽另一个类型声明,一个变量声明可以遮蔽另一个变量声明,一个方法声明可以遮蔽另一个方法声明。与其形成对照的是,变量声明可以遮掩类型和包声明,而类型声明也可以遮掩包声明。(——《JAVA解惑》)

示例代码:
这里写图片描述

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值