Abstract 修饰符

一旦修饰,变为虚无

抽象类abstract class

无法被 new

现象

1 2 3
public abstract class Cla { }
1 2 3!4 5
public class Dla { public void func() { new Cla(); }}

心态

有时一个类型太抽象, 仅仅为了消除代码冗余而出现

实际业务中, 并不会出现这个类型的对象

Self Check

接口是抽象的

抽象方法Abstract 函数

没有实现代码,只有声明

现象

1 2 3
public abstract class Cla { public abstract void func();}

心态

有时方法无法实现

有时方法会被所有子类覆盖掉, 并且所有子类都不调用 super, 实现了也没意义

abstract 相关规则

abstract 方法 和 abstract 类

一个结构里,如果有抽象的方法(严格来讲是,没有实现代码的方法),那么这个结构 必须是 abstract

abstract 和 接口

接口里的所有的方法都是抽象的,你写不写 abstract 都视为写了 abstract

接口 abstract 方法 与 实现类

实现类 欢乐 2 选 1

实现所有方法

没有实现所有方法,类声明为 abstract

父类 abstract 方法 与 子类

子类 欢乐 2 选 1

实现所有抽象方法

没有实现抽象方法,类继续声明为 abstract

Self Check

抽象类里一定有抽象方法

有抽象方法的类,一定是抽象类

一个类内,如果没有声明抽象方法,那么这个类可以被 new

抽象 与 接口 的对比

本质区别

接口是接口,为了创建新的访问权限

抽象类,还是类,只是不能被new

资源

抽象类里,可能有属性、方法、抽象方法

接口里,只能有抽象方法

关系

类 是

接口 能

特殊情况

如果一个抽象类 里 都是抽象方法,

那么会跟接口还蛮像的。

但子类只能有一个父类,可以实现多个接口

ZZAX 微信公众

文档一更新,立刻告诉你