文章目录
今日提要:private\static\final修饰词;同名变量;方法重载和方法重写
1.private(私有)
- 类不能标记为private,就是所谓的私有类,但在一些特殊的情况下有一种类被称为内部类;虽然类不能被标记为private,但是类依然有访问范围权限,所有不被public修饰的类,都是非公共类,非公共类大多(protected的受众范围稍大)只能被这个类所在的包中的其它类扩展;
- 被private修饰的方法,再次重复,不会被继承,因为私有方法对外来说不可见,你看见了也是不可见,编译器默认你看不见,虽然都是你写的,你还是看不见,嗯;所以一旦方法被private修饰了,那么这个方法就不存在继承和重写;
2.static(静态)
- static修饰变量我之前写过了,修饰方法也写过了,不过没涉及到方法的继承和多态
看段代码吧
java
public class TestOne {
public static void main(String[] args) {
Animal a = new Wolf();
a.roam();
}
}
class Animal{
public static void roam () {
System.out.println("动物在闲逛");
}
}
class Wolf extends Animal{
public static void roam() {
System.out.println("狼在原地盘桓");
}
}
输出结果:
java
动物在闲逛
- 虽然上面代码里面的父类和子类里面有参数、返回值类型、访问权限范围都一样的同名方法,但是却无法完成方法重写,很明显static阻止了方法的重写,这点在写代码时要注意;
3.final(最终)
[1].fianl修饰变量
- fianl关键字修饰基础类型变量,其值一旦初始化就不可以改变;
- fianl关键字修饰引用型变量,对其初始化之后,便不能让其指向另一个对象;
- fianl关键字修饰的都是常量,fianl关键字可以修饰局部变量;
[2].fianl修饰方法
- fianl关键字修饰的方法不能被子类重写;
- 当父类方法为fianl关键字修饰的,子类方法不能含有方法名、参数类型、参数个数和参数顺序都一样的方法;
- 如果父类有fianl关键字修饰的方法,而此方法权限范围修饰为private(私有),这个并不影响子类有相同名称的方法,原因简单,还是那句话,private不能继承,不可见;
[3].fianl修饰类
- fianl关键字修饰的类为最终类,最终类处于继承链末端,没有子类可以继承终类;
- fianl关键字修饰的类,它的类内方法也默认为fianl方法;
- fianl关键字修饰的类中的变量是可以改变的;
[4].为什么需要fianl关键字修饰类和方法
- 终类其实底层逻辑就是阻止一个类派生子类,但从安全性的角度去考虑,如果你知道一个类的最终执行结果,并且始终按照这个结果执行,而不会被子类重写,那你就需要定义一个终类,Java API中存在大量的终类,例如:String类就是一个fianl,String是不允许随便更改的;
- fianl修饰方法其实也是一样的逻辑,如果你要保证一个特定的方法不会被重写,你就可以把那个方法标记为fianl,如果一个类中所有的方法都需要避免被重写,那就需要把这个类标记为fianl;
4.private\static\final的共同点
private\static\final关键字修饰的方法和变量,都属于编译期绑定,也就是早期绑定,都起到了,阻止继承的作用
5.同名变量
如果子类拥有和父类一样的变量名,子类变量将屏蔽父类变量的继承,这点很重要,切记,切记!
6.方法重载和方法重写
项目 | 方法重载 | 方法重写 |
---|---|---|
简介 | 重载,只是在同个类中,有相同方法名的不同方法而已,与继承和多态没有任何关系 | 在继承关系中子类方法对父类(超类、基类)方法的覆盖重写 |
类 | 同一个类 | 有继承关系的类 |
方法名 | 相同 | 相同 |
方法参数 | 参数个数、类型、顺序都不同 | 参数列表相同 |
返回值类型 | 可以不同 | 必须相同 |
调用方式 | 参数决定 | 创建的实际对象决定 |
绑定 | 早期绑定,编译期绑定 | 后期绑定,动态绑定 |
private\static\final | 不影响 | 阻止继承,不会产生重写 |
真正的Java代码之路,应该说是从继承和多态开始的,这才是面向对象OO的基础知识,预祝大家和我一样学的愉(tou)快(yun);