面向对象特征:抽象
- 当定义一个抽象类,这个抽象类中可以有属性、成员方法、构造器、抽象方法、常量等结构
- 抽象类不能被直接实例化,需要依靠子类采用向上转型的方法处理
- 抽象类必须有子类,使用extends继承,一个类只能继承一个抽象类
抽象方法
- 抽象方法必须是public或者protected修饰符修饰(因为如果是private,子类无法继承,子类便无法实现该方法)
- 抽象类中可以没有抽象方法
- 抽象类是不能被实例化的(不能创建对象)
- 抽象类的构造器是为了约定子类的构造器必须和父类的匹配
- 子类(如果不是抽象类)则必须重写抽象类中的所有抽象方法。如果子类没有实现父类的抽象方法,必须将子类定义为abstract类
- 抽象方法:没有大括号,没有方法体
- 抽象方法存在的意义:约定(约定大于配置,配置大于编码)
- 抽象方法约定了返回值、访问权限、参数列表、需要在重写的时候去定义方法体
//抽象方法
public abstract void 方法名();
//静态常量
public static final String name = "张三";
//静态方法
public static void show(){
//默认方法
//谁可以调用它
public default void info(){}
注意:
- 抽象方法不能有private修饰,开发中,抽象方法基本上都是public修饰
- 抽象方法不能用final修饰,用final修饰的方法不允许被重写的
- 抽象类不能用final修饰,用final修饰的类是不允许被继承的
接口
接口是比抽象类更高级的抽象,抽象类是比类更高级的抽象
- 声明:使用interface关键字,例如:public interface 类名
接口中结构的特点
- 接口中方法默认是public abstract
- 接口中的常量默认是public static final
- 接口中的默认值是可以省略的
实现类
A类 implements 接口,那么A就是这个接口的实现类
- 如果一个类实现了一个接口,它就需要重写接口中所有的抽象方法
- 实现接口是可以多实现的
- 继承只能单继承
- 在开发中,如果一件事情可以通过继承和实现接口来解决问题,推荐接口解决
栈和队列
栈和队列是两种操作受限的线性表
这种受限表现在:
- 栈的插入和删除只允许在表的尾端进行(在栈中叫做“栈顶”),满足先进后出
- 队列只允许在表尾插入元素,在表头删除元素, 先进先出
栈和队列的相同点:
- 都是线性结构
- 插入操作都是在表尾进行
- 都可以通过顺序结构和链式结构实现
栈和队列的不同点:
- 队列,先进先出
- 栈,先进后出
多态的前提条件
- 继承、实现
- 重写方法
- 父类->子类,接口->实现类