抽象
***********************************************************************************************************
主要分2个部分:
1.抽象类 2.接口
***********************************************************************************************************
抽象方法:
当一个方法,我们只能确定他的声明,无法确定他的实现,那么该方法就设为抽象
方法。
语法: 在方法的声明部分加上一个可选修饰符abstract。然后该方法不能有实现部分,也就
是不能有方法块部分。用分号直接结束。
***********************************************************************************************************
1.抽象类
有抽象方法的类一定是抽象类。(在类的声明部分加上abstract)
特点:
1.不能产生对象。(原因:对象是个具体的,实际存在的,不应该有不确定的。)
2.抽象类存在的意义在于产生子类。
3.抽象类里面也有属性方法等等一个类该有的都有。
4.语法上:抽象类可以没有抽象方法,但是这样就失去设计的意义。
注意: 子类继承抽象类,必须实现抽象类中的所有抽象方法,除非这个类也是抽象类。
abstract只针对类和方法。
用法:一般用在父类中,所有子类共有的,都要重写的,就一般写为抽象方法,自然父
类就是抽象类了。
在代码中: @override 可以进行标注提醒。
***********************************************************************************************************
2.接口
特点:1.是一种独立的数据类型。
2.接口关注的是行为的共享(接口不能产生对象)
1> 定义
1.关键字:interface
2.接口在语法上访问修饰符只有public和default(默认)
属性:只能是公共,静态,常量属性(三个都得满足)
就算不写public statc final,默认也算常量。
构造:接口无构造方法。
方法:接口里面定义的方法只能是公共的,抽象的方法。
public abstract 可以省略不写。
没有实例初始化块,也没有静态初始化块。
公共借口的名字必须和他所在的java文件名保持一致。
注意:在jdk1.8中,接口有了新的功能,也就是能写方法实现部分。用default修饰。
eg: public default void methodA(){
xxxxxxxxxxxxxxxxxxxxx
}
2>实现
1.让类实现接口。
用关键字implements +接口名字
特点:1.实现接口的类必须实现接口的所有方法,除非这个类是抽象类。
2.一个类可以实现多个接口,在implements后面写多个接口的名字,用
逗号隔开。
3.类在实现接口的同时,可以做继承。
3>接口与接口的继承
1.接口的继承依然使用extends 关键字。
子接口自动继承父接口的抽象方法。
2.接口的继承是可以多继承的。
extends 后面书写需要继承的接口名字,用逗号隔开。
3. 接口的引用可以指向实现类的对象。
***********************************************************************************************************
行为的分类原则(指行为应该写到父类中,还是接口中):
1、对象与生俱来的行为写到抽象类中。
2、附加的行为写到接口中。
接口设计的原则是:
最小接口原则。
尽量小接口, 这样可以自由组合,防止接口污染。