静态方法无法直接调用非静态成员
Interface和Class:实现和定义ADT
接口中只有方法的定义,没有实现
接口之间可以继承与扩展
一个类可以实现多个接口(从而具备了多个接口中的方法)
一个接口可以有多种实现类
接口:确定ADT规约
类:实现ADT
也可以不需要接口直接使用类作为ADT,既有ADT定义也有ADT实现
实际中更倾向于使用接口来定义变量
打破了抽象边界,接口定义中没有包含constructor,也无法保证所有实现类中都包含了同样名字的constructor
故而,客户端需要知道改接口的某个具体实现类的名字
提高信息隐藏的方法:
使用接口声明变量
客户端仅使用接口中定义的方法
客户端代码无法直接访问属性
作用域:
public:当前类,同一包,子孙类(不同包),其他包
protected:当前类,同一包,子孙类(不同包)
default:当前类,同一包
private:当前类
严格继承(final):子类只能添加新方法,无法重写超类中的方法
重写的函数:完全相同的signature(签名)
重写的时候不要改变原方法的本意
@override(编译器会检查覆盖方法和被覆盖方法签名是否完全一致)
只有定义没有实现,我们成为抽象方法
抽象类:里面至少有一个抽象方法
抽象类不能实例化(不能用new生成对象)
继承某个抽象类的子类在实例化时,所有父类中的抽象方法必须已经实现
重载:多个方法具有同样的名字,但有不同的参数列表或返回值类型
价值:方便client调用,client可用不同的参数列表,调用同样的函数
重载是在编译阶段进行检查的
可以在同一个类内重载,也可以在子类中进行重载
重载的要求:
不同的参数列表
相同/不同的返回值类型
相同/不同的public/private/protected
异常
类中只有有一个泛型变量,那这个类就是泛型类
子类型的规约不能弱化超类型的规约