- 继承
1.1 是什么
- java 中只支持单继承,一个类只能有一个父类
- 什么是继承 : 提高代码的复用性,父类的功能,子类可以直接使用,使子类功能更加强大
-
在java中 使用extends 关键字表示
-
语法 : public class 类名 extends 父类名{ 类体 }
- 目的 : 提高代码重用性
- 一个类如果没有显示继承另外一个类的话,那么该类默认继承 Object
-
java.lang.Object 是java中的祖类(祖宗)
-
也就意味着 Object中的属性 是所有类都有的
1.2 能做什么
代码重用,子类可以直接使用父类的属性和方法
如果父类功能不能满足子类需求,还可以对父类方法进行重写
使用多态
1.3 怎么用
使用extends关键字
- Super
2.1 是什么
- super : 官方给出的说法是 super保存了父类型特征
- 在子类中 访问父类的属性
- super 用法 :
-
1 用于成员/构造方法中区分子类和父类同名的成员属性
-
2 用于子类构造方法中,调用父类构造方法(必须出现在子类构造方法的第一行)
-
语法 : super(参数);
-
如果 子类构造方法中 没有this(xxx) 也没有 super(xxx) 那么 默认会有一个 super();
-
去调用父类的无参构造
-
this() 和 super() 都必须出现在构造方法第一行,那么就意味着 它俩不能同时出现
- this和super 都不能在静态方法中使用
2.2 怎么用
2.3 调用父类构造
- 子类构造方法使用super(); 去调用父类的构造方法
-
1 创建对象
-
2 初始化父类属性
- 如果构造方法中没有显示this()和super() 则第一行 默认是 super() 调用父类无参
- this() 和 super() 为什么必须出现在构造方法第一行?
-
super() : 用来调用父类构造,初始化父类属性,并且创建对象(最终肯定会调用到Object,通过Object创建对象)
-
既然是创建对象的,那么只能在构造方法第一行,因为构造方法还有初始化成员属性的功能
-
成员属性想要初始化,必须有存储它的空间,而这个空间就在对象中
-
所以要保证现有对象,再有数据初始化
-
所以 super()必须在第一行
-
this() : 重载调用当前类的其他构造方法
-
保证先有对象
2.4 注意
this() 和 super() 不能同时出现,因为两个都必须写在第一行
2.5 实例语句块和构造方法
- 实例语句块 : 可以等同看做成员方法,肯定需要使用对象调用的
- 但是由于没有名字,不能手动调用,只能自动调用
- 所以 只要创建完对象 就立刻执行
- 所以 实例语句块是在创建对象后执行,并且执行构造方法体之前
- 覆写
3.1 是什么
- 覆写 : 覆盖/重写/覆写
- 子类继承父类之后,需要和父类完全一样吗?
-
不需要
-
1 子类也有自己的特有属性
-
2 可以覆写父类的成员方法
- 覆写特指成员方法
3.2 应用场景
-
1 什么时候需要进行覆写
-
如果父类的方法已经无法满足子类的需求的时候,需要将父类中的方法进行重写
-
2 重写的条件
-
1 必须是有继承关系的体系中
-
2 方法名必须相同,返回值必须相同,参数列表必须相同
-
3 不能比原方法有更宽泛的异常
-
4 不能比原方法有更低的访问权限
-
5 覆写特指成员方法
-
3 继承最基本的作业 : 代码重用
-
4 继承最重要的功能 : 方法可以覆写,多态
-
重写的目的 :
-
1 满足当前需求 , 方法体编码
-
2 错误越来越少,不能有更宽泛的异常
-
3 使用范围越来越广,不能有更低的访问权限
-
4 功能越来越强
- Final
4.1 是什么
final : 是修饰符,表示最后的,最终的,不可更改的
4.2 能干什么
-
1 修饰的类 不能被继承
-
2 修饰的变量 就是常量,不能二次赋值(整个程序生命周期中不可更改),没有默认值
-
常量一般是public static final 的
-
3 修饰的成员方法不能被覆写
4.3 怎么用 -
深入final :
-
final修饰的变量,内存空间中的值不可更改
-
如果修饰的是引用类型变量,也是一样的道理,但是和引用类型的地址指向的堆内存空间,没有关系