abstract 抽象类
用于修饰“类”,使其无法被new(创建)对象
可被子类继承,提供共性属性和方法
可声明为引用,更自然地使用多态
abstract 抽象方法
只有方法声明,没有实现,即无方法体,等待子类去实现,不加中括号
子类继承抽象类后必须实现所有抽象方法,除非子类也是抽象类
有抽象方法,那这个类一定是抽象类(或接口)
static关键字
静态的东西在类里面只存一份,即共享
直接通过类去调(因为new的名称已经无意义了)
可用于统计对象创建次数(因为属性共享)
在静态里不能用this、super
如Math.random(),即直接用类名调用的静态方法
不能被重写,无多态
静态代码块
静态属性初始化之后执行
优先于类执行,用于加载初始参数(仅一次)
final关键字
用来修饰类,使其不可更改,不可被继承,不可被重写
修饰变量后变成常量,必须要赋初值,否则要在每一个构造函数里赋初值
静态常量final static不提供默认值,需手动赋值(初始化或代码块)
对象常量
final 修饰基本类型,值不可变
修饰引用类型,地址不可变,里面的值可变
接口
接口的语法
将类替换为interface
jdk8前,只能定义静态常量和抽象方法
接口相当于一个抽象父类
与抽象类的异同
接口表示能力
接口是一种能力和约定,可实现接口扩充子类能力
只提供能力类型(名称),不提供实现方法,留给使用该接口的实现
使用implements(实现)接口(类似于继承),可同时实现多个接口,达到类似多继承的方式
接口规范
任何类在实现接口时,必须实现接口中的所有抽象方法,除非此类为抽象类
实现接口中的抽象方法时,访问修饰符必须是public
接口回调
先有接口的使用者,再有接口的实现者