1. 类中的方法覆盖现象
1.1. 覆写的定义
- 当父类中的方法与子类所要求的不一样时,
在子类中重新定义该方法, 并修改方法体.
以达到子类所想要的效果.
1.2. 覆写的原则
1.2.1. 一同
- 实例方法签名必须相同.(参数表和方法名一样)
因此改变的只是方法体.
1.2.2. 两小
- 子类方法的返回值类型是和父类方法的返回值相同或者是其子类.
- 子类方法声明抛出的异常类型和父类方法声明抛出的异常类型相同或者是其子类.
- 子类方法中声明抛出的异常小于或等于父类方法声明抛出异常类型.
- 子类方法可以同时声明抛出多个属于父类方法声明抛出异常类的子类(RuntimeException 类型除外).
1.2.3. 一大
- 子类方法的访问权限比父类方法访问权限更大或相等.
即, 若父类方法是public
子类必须也是public
. 若父类方法是protected
子类可以是public
或protected
.
1.3. 备注
- 在覆写方法前加上
@Override
的标签,
编译器会自动检测接下来的方法是否能够被覆写 - 只有方法有覆写的概念, 字段并没有
1.4. 覆写和重载的区别
方法覆写(重写):
重写是指在派生类中重新对基类中的虚函数重新实现.
即函数名和参数都一样, 只是函数的实现体不一样.
这种关系是存在于父类和子类之间的, 是垂直关系.方法重载:
重载是指不同的函数使用相同的函数名, 但是函数的参数个数或类型不同.
调用的时候根据函数的参数来区别不同的函数.
这种关系是存在于同一个类中的不同方法间的, 是水平关系.
2. 类中的隐藏(遮蔽)现象
2.1. 满足继承的访问权限下, 隐藏父类静态方法
若子类定义的静态方法的签名和父类中的静态方法签名相同
那么此时会对父类方法进行隐藏.
- 注:
- 仅仅是静态方法, 子类存在和父类一模一样的静态方法.
static
不能和super
共存, 理由和this
一样, 找不到对象.
2.2. 满足继承的访问权限下, 隐藏父类字段
若子类中定义的字段和父类中的字段名相同(不管类型, 只管名字)
此时会将父类的同名字段进行隐藏, 要用 super
才能访问父类中同名字段
2.3. 隐藏本类字段
若同类中某局部变量名称和类中某字段名称相同, 此时会隐藏本类字段,
这种情况下只能通过 this
来进行访问被隐藏的字段.