1.抽象类和接口的语法特性
抽象类不允许被实例化,只能被继承.它可以包含属性和方法.方法既可以包含代码的实现,也可以不包含代码的实现.不包含代码的实现叫做抽象方法.接口不能包含属性,只能声明方法,方法不能包含代码实现.类实现接口的时候,必须实现接口中声明的所有方法.
2.抽象类和接口存在的意义
抽象类是对 成员变量和方法的抽象,是一种is-a关系,是为了解决代码复用问题.接口仅仅是对方法的抽象,是一种has-a的关系,表示具有一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高diamante的扩展性.
3,抽象类和接口的应用场景和区别
什么时候该用抽象类?设么时候该用接口?实际上,判断的标准很简单.如果表示一种is-a 的关系,并且是为了解决代码的复用问题,我们就用抽象类;如果要表示一样has-a关系,并且是为了解决抽象而非代码复用问题,我们就用接口.
如果让我聊聊接口和抽象类,我会这么聊:定义,区别(是什么),存在意义(从哪来),应用(到哪去)
1.定义:
抽象类:不允许实例化,只能被继承;可包含属性和方法,包含抽象方法;子类继承抽象类必须重写抽象方法
接口:不允许实例化,只能被实现;不包含属性和普通方法,包含抽象方法,静态方法,default方法,类实现接口时,必须实现抽象方法.
2.意义:
抽象类:解决复用问题,适合于is-a关系.
接口:解决抽象问题,适合has-a关系.
3应用:.....
抽象类使用例子:
代码复用(三个具有相同性质的类直接继承抽象类获取他的抽象定义方法,例如本科专科 抽象类为学生,使用的时候不需要创建多个对象)
抽象类的访问修饰符 为protected 同包下使用
//定义一个动物抽象类 里面有一个eat的方法和doInit抽象方法
//实现这个Animal的类必须实现doInit方法 调用eat方法的话直接在使用的地方eat();
abstract class Animal{
public String eat(String food){
return food+":is food";
}
abstract void doInit() ;
}
顺便写个枚举:
enum Test{
ASD1("1","one"),
ASD2("2","two"),
ASD3("3","three");
private String key;
private String value;
private Test(String key,String value){
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
//根据key值得到他的value值
public static String getValueByCode(String code){
for (Test ele : values()) {
if(ele.getKey().equals(code)) return ele.getValue();
}
return null;
}
Test.getValueByCode("1") // one