Java - 继承与抽象类
-
继承:简化了有重复内容类的书写。
-
定义一个实体类
-
没有 static 的方法是成员方法。
-
继承体系内存图
-
继承-书写代码
- 向上抽取:把那些类的共有部分抽取出来
- 向下实现:写代码时先定义父类再定义子类
-
-
一个Java 文件中可以定义多个类,但最多只能有一个 public 类。
-
.class 文件对应某一个类而不是一个java文件。
-
继承-运行过程
- 创建子类对象的时候,系统会先默认调用父类的无参构造方法,加载父类的内容,但并未创建父类的对象。
- 子类构造方法第一行默认会有一个super( ) 方法,用于实例化父类。
-
继承中的方法重写
-
当父类的方法中的内容不够好时,可以在子类中对其重写。
-
注解的使用- 写在重写方法上方,用于避免自己错写成了一个新的方法。
注意:1. 注解是不会检查返回值类型的,修改了返回值类型会报错是因为方法同名,调用时那就不知道是调用哪个方法了。
2. 重写的时候如果改了方法的使用范围,就是public 那个关键字,只能改成比原来范围更大的。而且如果父类的方法是private 的,那么子类是不能实现重写的,会成为一个子类自己的方法。
-
-
在重写的方法中也是可以调用原来要重写的父类的那个方法的。
-
this 关键字
-
this() 代表调用类的构造方法,不要在构造方法里用,会死循环。
-
-
延迟加载,可以有效节约内存空间。再看一下代码
-
-
super 关键字
- super 可以直接调用父类的成员变量,成员方法,构造方法。
- 子类中其实暗含着继承自父类的成员变量,所以子类的满参构造方法要包括父类的成员变量才算满参。
- 在堆内存中,子类对象中会有一个super 变量用于存储父类的内容。
-
继承注意事项
- 一个类只能继承于一个类
- 一个父类可以有多个子类
- 允许层层往下继承
- 通俗理解:一个爸爸可以有多个儿子,一个儿子只能有一个爸爸,允许不断地传宗接代。
-
抽象类
-
-
抽象的子类可以直接继承抽象方法,且可以不重写。
-
抽象类不能实例化一个对象,因为它的内容本身就是不确定的,没法实例化。
-
抽象类只能通过子类创建对象。
-
抽象类可以有构造器,供子类初始化父类成员。
-
-
设计模式 - 模板
```
模板设计模式:
// 父类定义成抽象类,子类确定的内容,在父类中定义成非抽象方法。
// 子类不确定的内容,在父类重定义成抽象方法,将来交给子类自己定义该功能。
```