接口类的特性:
-
接口中的方法会被隐式的指定为 public abstract(使用其他修饰符会报错)
-
接口中所有变量会被隐式的指定为 public static final 变量(使用其他修饰符会报错)
-
JDK 8 后,接口中可以加入 static 和 default 修饰的非抽象方法,它们分别使用类名 和其实现的子类 调用
抽象类的特点:
-
抽象类不能被实例化,所以抽象类必须被继承,才能被使用
-
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
-
继承抽象类的子类一定会用到父抽象类的构造器。抽象类默认有空参构造器,其继承的子类会默认使用空参构造器。如果抽象类中只有含参数的构造器,那么其继承的子类的构造器中,必须要使用 super(…) 指明抽象类的构造器
接口与抽象类的配合使用:
-
接口中的抽象方法,对于实现它的子类,都要求重写它的抽象方法。
当在一个接口中,加入一个抽象方法时,他的子类都必须去实现新的抽象方法。
-
抽象类中既可以有抽象方法,也可以有非抽象方法。对于继承它的子类,具有它的非抽象方法,但必须重写它的抽象方法。
当在一个抽象类中,加入一个非抽象方法时,那么它的所有子类都同时具有了这个新方法。
-
接口和抽象类的配合使用,就可以实现缺 省适配置模式
用抽象类实现接口,在接口中,定义出抽象方法,在抽象类,实现默认的抽象方法。
对于其所有子类,继承抽象类,如果需要子类完成的方法,不在抽象类中实现,则所有子类都需要去实现抽象方法;如果不需要子类去实现的方法,可以在接口中定义、在抽象类中实现,则子类就具有了这个新方法。
interface interfac {
//接口中只能定义方法
void methodIn();
}
abstract class abstrac implements interfac {
//在抽象类中,可不用实现接口中的方法
@Override
public void methodIn() {
}
//可以对方法进行实现
public String methodAb() {
return "methodAb";
}
//可以使用抽象方法
abstract public String methodAb1();
}
class myClass extends abstrac implements interfac {
//本类 或者 其父类必须实现接口中的方法
// @Override
// public void methodIn() {
//
// }
//必须实现继承的抽象类中的抽象方法
@Override
public String methodAb1() {
return null;
}
//可以使用抽象类中定义好的方法
public String myMethod() {
return this.methodAb();
}
}