方法的覆盖
1. 方法覆盖又被称为方法重写
2. 什么时候使用方法重写?
当父类中的方法无法满足当前子类中的业务需求,
子类有必要将父类中继承过来的方法进行重新编写
这个重新编写的过程称为方法重写/方法覆盖
3. 什么条件满足之后会发生方法重写?
* 方法重写发生在具有 "继承关系" 的父子类之间
* 方法重写的时候:返回值类型相同,方法名相同,形参列表相同
* 方法重写的时候:返回权限不能低,可以更高
* 方法重写的时候:抛出异常不能更多,可以更少
4. 建立方法重写尽量用工具生成
5. 注意:
* 私有方法不能继承,所以不能覆盖
* 构造方法不能继承,所以不能覆盖
* 静态方法不存在覆盖
* 覆盖只针对方法,不针对属性(变量)
final关键字
1.关于Java语言中的关键字:
* final翻译为:最终的,不可变的
* final修饰的类无法继承、无法覆盖
* final修饰的类无法覆盖
* final修饰的变量一旦赋值之后,不可以重新赋值
* final修饰的实例变量
原因:实例变量已经有默认值。【构造函数】,final修饰的变量一旦复制,不可以在重新赋值
综合考虑:使用final修饰之后,必须手动赋值,不能采用系统赋值
第一种解决方案:手动赋值
第二种解决方案:使用构造方法赋值
* final修饰的引用
- 一旦指向某个对象之后,无法在指向其他对象,那么指向的对象无法被垃圾回收机制回收
但是所指向的对象内部的内存是可以修改的
* final修饰实例变量是不可变的,这种变量常常与static联合使用,称为“常量”
- 常量定义的语法格式:
public static final 类型 常量名 = 值;
2. 所学习的类库,包括:
- 源码【看源码理解程序】
- 字节码【程序开发过程中使用的部分】
- 帮助文档【帮助信息,对源码的解释信息】
包和import
1. 关于Java语言当中的包机制:
* 引用包机制的主要是为了程序的执行方便
不同功能的类被分门别类放到不同的软件包当中
* 怎么定义package?
- 在Java源程序的第一行语句编写package语句
package只能编写一个语句
- 语法结构
package 包名;
* package的命名规则:
公司域名倒序+项目名+模块名+功能名;【重名的几率低】
* 包名要求全部小写,必须遵守标识符命名规则,包名也是标识符
* 目录之间用 “.” 隔开
* 一个包对应一个目录
* 使用了package之后,类名将不在是原先的名字了
而是,【公司域名倒序+项目名+模块名+功能名】 的结合
* 包名在统一文件下可以省略
2. import 导入
* “*”表示所有,如果代码在同一个包中那么可以使用这个符号进行包的导入,减少步骤
* import用来完成导入其它类,同一个包下的类的不需要导入,不在同一个包的类需要手动导入
* 语法格式:
- import 类名;
- import 包名.*;
- import语句需要编写在package之下,class语句之上
* 什么时候需要import?
- 不是Java.lang包下。并且不在同一个包下的时候。需要使用import进行引入
- 导包的快捷键:CTRL+shift+O;
访问控制权限修饰符
1. 访问控制权限修饰符来控制元素的访问范围
2. 访问控制权限的修饰符包括:
- public 【表示公开的,任何位置都可以及进行访问】
- protected 【表示保护的,】
* 同包 和 子类 下可以在不同的包和类进行访问
如:出了本包,前提是,你得使用子类才能使用
同包:就是在同一个包名下也可以进行访问
- private 【表示私有的,只能在本类中进行访问】
- 缺省 【修饰符不写。则该语句表示缺省 】
* 同包
* 出了包。前提是你得使用包名才能访问
3. 访问控制权限修饰符可以修饰类、变量、方法....
4. 当某个数据只希望在类使用,使用protect进行修饰
5. 修饰符的范围:
private < 缺省 < protected < public
6. 类只能采用public和缺省的修饰符进行修饰【内部类除外(类中在定义类)】