课程笔记Day10
- 抽象
- 接口
- 比较器
第一章 抽象
第01节 基础理论
抽象的由来
在我们编写代码,采用继承关系的时候。继承是【向上抽取共性】的过程。
例如:
猫
成员变量: name age
成员方法: 撸猫、吃
狗
成员变量:name age
成员方法:遛狗、吃
我们向上抽取共性,形成父类 动物 对于成员方法而言,都应该具备有 吃的功能。
但是站在动物的角度来说,动物吃什么? 我们不清楚
生活实例:
说明:
站在父类的角度考虑问题,父类当中一定是存在这个功能的,但是这个功能说不清楚具体的实现方式。
这种情况下,这个功能就是抽象的。(例如上述案例当中的 形状的面积 和 动物的吃)
第02节 快速入门
效果图
案例代码
动物类
//动物类【抽象类】
public abstract class Animal {
//动物睡觉的方式是一样的
public void sleep(){
System.out.println("动物睡觉..");
}
//动物吃的方式是不一样的
//抽象方法所在的类,必须是抽象类
public abstract void eat();
}
猫类
//猫类【子类】 Alt + Enter
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
测试类
//测试类
public class Test {
public static void main(String[] args) {
//创建对象
//这里出错,抽象类不能创建对象(不能实例化)
//Animal aa = new Animal();
//创建对象
Cat c = new Cat();
//调用方法
c.eat(); //猫吃鱼
c.sleep(); //动物睡觉..
}
}
第03节 注意事项
抽象类 和 抽象方法 需要注意哪些问题
1. 两者关系
抽象方法所在的类,必须是抽象类。
抽象类当中,不一定有抽象方法,还可以有其他方法。
2. 对象和构造
抽象类不能创建对象,也就是不能被实例化。
抽象类有构造方法,给成员变量初始化数据。
3. 使用方式
如果一个类,继承了抽象类,那么他有两个选择。
选择一:把自己变成抽象类
选择二:重写父类当中,所有的抽象方法
4. abstract 和 final 不能共存。为什么呢?
A.抽象类是要求被继承的,有子类的。 而final修饰的类,是不能被继承。
B.抽象方法是要求被重写的,而 final 修饰的方法,是不能被重写的。
演示:抽象类当中,包含有构造方法。不包含抽象方法的情况
第04节 模板方法
基础理论
设计模式:共计有 23种。
他是程序员经过多年长期的积累,累计出来的 23种 编写代码的方式。设计代码的方式。
生活实例
《司机的故事》
司机分为两种:新手司机和老司机。开车的方式很像。
新手司机:
1. 系上安全带,点火,启动
2. 双手紧握方向盘,刹车当油门,猛地轰
3. 熄火,停车
老司机:
1. 系上安全带,点火,启动
2. 三挡起步,一只手握方向盘,一只手抠脚
3. 熄火,停车
小结操作步骤
1. 将共性的内容,写在父类当中,定义成为 final 修饰的方法。
2. 将不同的内容,定义在父类,作为抽象方法,交给各自的子类去实现。
3. 在父类的 final 方法当中去调用父类的抽象方法。
案例代码
司机类
//司机类【抽象类】
public abstract class Driver {
//存在开车的方法
public final void byCar(){
System.out.println("1.系上安全带,点火,启动");
useCar();
System.out.println("3.熄火,停车");
}
//定义一个方法,表示不同的操作
public abstract void useCar()