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:⼀个域、静态⽅法或成员类型可以分别隐藏其超类的可访问到的相同名字的域、静态⽅法或成员类型。
运算结果为:
java重写和重载的区别Tom
show in A
show in B
4.遮蔽(shadow)
当⼀个声明遮蔽了另⼀个声明时,简单名将引⽤到遮蔽声明中的实体
最容易产⽣的遮蔽:局部变量与成员变量同名时。
⼀种最常见的遮蔽: 构造⽅法中参数名与成员名相同时
⽰例代码:
5.遮掩(obscure)
定义:遮掩是指两个名字位于不同的名字空间的名字重⽤形式,名字空间包括:变量、包、⽅法或类型。
⼀个变量可以遮掩具有相同名字的⼀个类型,只要它们都在同⼀个范围内;
⼀个变量或⼀个类型可以遮掩⼀个包。
遮蔽与遮掩⾮常相像,⼆者的关键区别是⼀个声明只能遮蔽类型相同的另⼀个声明:⼀个类型声明可以遮蔽另⼀个类型声明,⼀个变量声明可以遮蔽另⼀个变量声明,⼀个⽅法声明可以遮蔽另⼀个⽅法声明。与其形成对照的是,变量声明可以遮掩类型和包声明,⽽类型声明也可以遮掩包声明。(——《JAVA解惑》)
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;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论