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
资源
抽象类里,可能有属性、方法、抽象方法
接口里,只能有抽象方法
关系
类 是
接口 能
特殊情况
如果一个抽象类 里 都是抽象方法,
那么会跟接口还蛮像的。
但子类只能有一个父类,可以实现多个接口