方法只有声明没有实现时, 该方法就是抽象方法, 需要被 abstract 修饰,
抽象方法必须定义在抽象类中, 该类必须也被 abstract 修饰
抽象类不可以被实例化. 因为抽象方法没有方法体, 调用抽象方法没有意义
抽象类的子类必须覆盖父类的所有抽象方法后, 该子类才可以实例化
抽象类的细节
抽象类不可以被实例化, 但是有构造函数. 用于给子类对象进行初始化.
抽象类中可以不定义抽象方法, 但是很少见. 目的就是不让该类创建对象. AWT 的适配器对象就是这种类.
通常这个类的方法有方法体, 但是却没有内容.
abstract class Demo
void show1()
void show2()
抽象关键字不可以和下列关键字共存:
private, 抽象类中的方法需要被子类覆盖, 私有之后, 找不到该方法, 无法达到覆盖的目的
static, 静态修饰的内容可以直接用类名调用, 但是抽象方法没有方法体, 调用之后, 没有意义
final, 被 final 修饰的类不能被继承, 方法不可以被覆盖
抽象类和一般类的异同点:
抽象类和一般类都是用来描述事物的, 都在内部定义了成员
一般类有足够的信息描述事物
抽象类描述事物的信息有可能不足
一般类中不能定义抽象方法, 只能定义非抽象方法
抽象类中可定义抽象方法, 同时也可定义非抽象方法
一般类可以被实例化
抽象类不可以被实例化
类与接口之间是实现关系 (implements), 而且类可以继承一个类的同时实现多个接口
接口与接口之间可以有继承关系, 而且接口可以多继承.
因为接口没有方法体, 多继承在类中无法实现, 是因为同名方法体在调用时, 产生不确定性.
interface CC
public abstract void show();
interface MM
public abstract void method();
interface QQ extends CC,MM
public abstract void function();
class WW implements QQ
// 需要覆盖 3 个方法
public void show(){}
public void method(){}
public void function(){}
接口的特点
接口是对外暴露的规则
接口是程序的功能扩展
接口的实现降低耦合性
接口可以用来多实现
接口和抽象类的异同点
都是不断向上抽取而来的
抽象类需要被继承, 而且只能单继承
接口需要被实现, 而且可以多实现
抽象类中可以定义抽象方法和非抽象方法, 子类继承后, 可以直接使用非抽象方法
接口中只能定义抽象方法, 必须全由子类去实现
抽象类的继承是 is a 关系, 是在定义该体系的基本共性内容
接口的实现是 like a 关系, 是在定义该体系的额外功能
类与对象的关系
类与接口的关系
JavaSE 基础视频(毕向东)