一、抽象类abstract

(一)概念
1.抽象类主要指不能具体实例化的类并且使用abstract关键字修饰,也就是不能创建对象
2.真正意义上的抽象类应该是具有抽象方法(本来可以没有)并且使用abstract关键字修饰的类
抽象方法:
不能具体实现的方法并且使用abstract关键字修饰,也就是没有方法体 public abstract void cry();
(二)两者关系
• 抽象类中可以有成员变量、构造方法、成员方法;
• 抽象类中可以没有抽象方法,也可以有抽象方法
• 拥有抽象方法的类必须是抽象类,因此真正意义上的抽象类应该是具有抽象方法并且使用abstract关键字修饰的类。
(三)实际意义
• 抽象类的实际意义不在于创建对象而在于被继承。
• 当一个类继承抽象类后必须重写抽象方法,否则该类也变成抽象类,也就是抽象类对子类具有强制性和规范性,因此叫做模板设计模式

二、接口interface

(一)概念
1.接口就是一种比抽象类还抽象的类,体现在所有方法都为抽象方法
2.定义类的关键字是class,而定义接口的关键字是interface

(二)特性
1.里面只能有常量(所有字母大写)
2.里面只能有抽象方法(新特性除外),注释中的关键字可以省略,但建议写上
3.从Java9开始允许接口中出现私有方法
public interface InterfaceTest {
public static final int CNT = 1; // 里面只能有常量(所有字母大写)
//private void show(){} // 从Java9开始允许接口中出现私有方法
public abstract void show();里面只能有抽象方法(新特性除外),注释中的关键字可以省略,但建议写上
}![image.png](https://cdn.nlark.com/yuque/0/2020/png/2733429/1603261475435-3d461a22-efdc-4aa1-a372-276bf9881913.png#align=left&display=inline&height=239&margin=%5Bobject%20Object%5D&name=image.png&originHeight=477&originWidth=1519&size=129763&status=done&style=stroke&width=760)

三、两者区别

• 定义抽象类的关键字是abstract class,而定义接口的关键字是interface。
• 继承抽象类的关键字是extends,而实现接口的关键字是implements。
• 继承抽象类支持单继承,而实现接口支持多实现。
• 抽象类中可以有构造方法,而接口中不可以有构造方法。
• 抽象类中可以有成员变量,而接口中只可以有常量。
• 抽象类中可以有成员方法,而接口中只可以有抽象方法。
• 抽象类中增加方法时子类可以不用重写,而接口中增加方法时实现类需要重写( Java8以前的版本)。
• 从Java8开始增加新特性,接口中允许出现非抽象方法和静态方法,但非抽象方法需要使用default关键字修饰。
• 从Java9开始增加新特性,接口中允许出现私有方法。

四、多态

image.png

五、内部类

(1)内部类的分类:
image.png
(2)匿名内部类的使用
image.png
image.png
结合lamda表达式:
image.png