2022-07-26 第六小组 张宁杰 面向对象:抽象
目录
抽象方法
使用抽象类的注意事项
接口
知识点
抽象方法:
无大括号,无方法体
存在意义:
约定,自定义的规则
约定大于配置,配置大于编码
抽象方法到底约定了什么?
约定了返回值,访问权限,参数列表,需要在重写的时候定义方法体
抽象方法必须存在于抽象类中
1.当我们定义一个抽象类,这些类中有哪些结构?
属性,成员方法,构造器,抽象方法,常量
2.抽象类中能不能没有抽象方法?
可以
3.抽象类不能被实例化
抽象类不能创建对象
4.抽象类的构造器存在的意义
约定子类的构造器要和父类的构造器一致
5.一个类如果继承了一个抽象类,那必须重写抽象类中的所有抽象方法
abstract能修饰什么?
类、方法
抽象方法能不能用private修饰?
不能,开发中,抽象方法基本都是public修饰
抽象方法能不能用final修饰?
不能,用final修饰的方法是不允许覆盖的
抽象类能不能用final修饰?
不能,用final修饰的类是不允许被继承的
使用抽象类的注意事项:
1、在使用抽象方法时,抽象方法必须是public 和 protected,如果是private,是不能被子类重写的。默认情况下是public
2、抽象类是不能直接被实例化的,需要依靠子类采用向上转型的方法处理
3、抽象类必须有子类,使用extends继承,一个类只能继承一个抽象类
4、子类如果不是抽象类,必须重写抽象类中的所有抽象方法。如果子类没有实现父类的抽象方法,那必须将子类也设置为abstract
接口:
比抽象类更高级的抽象
声明:使用interface关键字
JDK1.7之前接口中只能定义抽象方法,不能有属性,不能有方法(静态的常量、静态方法)
JDK8后:接口中只能定义抽象方法,不能有属性,可以有默认方法和静态常量,静态方法
默认方法,静态方法
接口中结构的特点:
接口的方法默认是public abstract,我们推荐就省略了;接口中的常量默认是public static final
接口中的结构必须是public
接口可以被实现,实现类
如果一个类实现了接口,那就要重写所有抽象方法
实现接口可以多实现,继承只能单继承
开发中,如果可以通过接口和继承来解决问题,优先使用接口
面试题:
(在面试的时候,不要回答一个... 一个....,面试官会觉得态度不端正)
1.继承抽象类和实现接口的异同
2.抽象类和接口的区别
接口存在的意义:
比抽象类更加严格的约定
多态的前提条件:
1.继承,实现
2.重写方法
3. 父类----子类,接口-----实现类
面试题:
Java中是否有单继承?
类与类之间确实只有单继承
匿名实现类:
Inter01 inter01 = new Inter01() {
@Override
public void eat() {
System.out.println("重写过后的eat方法...");
}
};
inter01.eat();
栈和队列:
两种操作受限的线性表
这种受限表现在:栈的插入和删除只允许在表的尾端进行(在栈中叫栈顶)
First In Last Out
队列只允许在表位插入元素,在表头删除元素First In First Out
相同点
1.都是线性结构
2.插入操作都是在表尾进行
3.都可以通过顺序结构和链式结构实现
栈与队列的不同点:
1.队列,先进先出,栈先进后出
学习感受
今天学习了面向对象的最后一个特征:抽象。学习难度不大,但需要通过实例来理解这个特性。下午我们用单链表做了队列和栈,这两个数据结构还需要加强理解。