final修饰符
最终的,终态的,无法改变的
在继承关系中,有时候父类中的功能方法不行让子类进行覆盖式重写,必须提供一个关键字:final
注意: 父类中并不是所有的功能都必须使用final修饰,某些功能方法需要用final修饰确保功能的安全性
常量的分类:
字面值常量:“hello”,10,13.1,true,‘A’,‘0’,‘a’
自定义常量:public final int num = 10;
final使用中的注意事项:
- final可以修饰基本数据类型的变量,当前该变量的值不能被改变
- final可以修饰引用数据类型,当前该类型对象的地址值不能被改变
final修饰变量的初始化时机:
- 变量只能被初始化一次
- 当前变量只是定义了,在构造方法执行之前必须初始化
多态
在同一时刻体现出事物的不同状态
多态的前提条件:
- 必须有继承关系
如果没有继承关系,无意义; - 必须有方法重写
在继承关系中父类比较抽象; - 必须父类引用指向子类对象(向上转型)
格式:父类名 对象名 = new 子类名();
在多态中的成员访问特点:
成员变量: 编译看左边,运行看左边
构造方法:在多态中,父类对象的创建通过new子类名(),优先让full进行数据初始化
成员方法:编译看左,运行看右边(存在方法重写)
静态的成员方法:编译看左,运行看左;静态成员方法算不上方法重写,因为静态跟类有关
多态的好处:
- 提高了程序的维护性(由继承关系保证)
- 提高了代码的扩展性(由多态的保证)
多态的弊端: 多态中无法直接访问子类的特有功能
如何解决? 必须在多态的第三个前提条件下:
- 子类new子类对象(虽然可以,但是从内存角度考虑,比较消耗内存空间)
- 将父类引用强制转换为子类对象(向下转型)
方法重写
override
子类继承父类,出现了和父类中一模一样的方法声明
特点: 在开发过程中,可能需要对父类当前这个方法进行扩展,需要重写父类中的方法