面向对象特征:抽象

  1. 当定义一个抽象类,这个抽象类中可以有属性、成员方法、构造器、抽象方法、常量等结构
  2. 抽象类不能被直接实例化,需要依靠子类采用向上转型的方法处理
  3. 抽象类必须有子类,使用extends继承,一个类只能继承一个抽象类

抽象方法

  1. 抽象方法必须是public或者protected修饰符修饰(因为如果是private,子类无法继承,子类便无法实现该方法)
  2. 抽象类中可以没有抽象方法
  3. 抽象类是不能被实例化的(不能创建对象)
  4. 抽象类的构造器是为了约定子类的构造器必须和父类的匹配
  5. 子类(如果不是抽象类)则必须重写抽象类中的所有抽象方法。如果子类没有实现父类的抽象方法,必须将子类定义为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 类名

接口中结构的特点

  1. 接口中方法默认是public abstract
  2. 接口中的常量默认是public static final
  3. 接口中的默认值是可以省略的

实现类

A类 implements 接口,那么A就是这个接口的实现类

  • 如果一个类实现了一个接口,它就需要重写接口中所有的抽象方法
  • 实现接口是可以多实现的
  • 继承只能单继承
  • 在开发中,如果一件事情可以通过继承和实现接口来解决问题,推荐接口解决

栈和队列

栈和队列是两种操作受限的线性表

这种受限表现在:

  • 栈的插入和删除只允许在表的尾端进行(在栈中叫做“栈顶”),满足先进后出
  • 队列只允许在表尾插入元素,在表头删除元素, 先进先出

栈和队列的相同点:

  • 都是线性结构
  • 插入操作都是在表尾进行
  • 都可以通过顺序结构和链式结构实现

栈和队列的不同点:

  • 队列,先进先出
  • 栈,先进后出

多态的前提条件

  1. 继承、实现
  2. 重写方法
  3. 父类->子类,接口->实现类