一、抽象类(abstract)
抽象类是有abstract修饰的类,例子如下:
abstract class AbsText{
private int i = 0;
public AbstractClass(int i){
this.i = i;
}
abstract void abstractMethod();
public void Method(){
}
}抽象类中允许有构造方法,但是不能实例化,因为在这个类被定义为抽象类,即使该类中没有抽象方法也不能实体化。
也允许有成员变量,以及普通方法。
二、接口(interface)
接口是通过interface进行定义
interface InterTest{
int a = 10;
void Method();
}接口内除了定义方法外还可以定义常量,该常量只能是public static final常量,方法的修饰符为public / default 方法。
三、二者区别
抽象类在java中表示一种继承关系,并且一个类只能使用一个继承关系。但是,一个类可以实现多个interface。
- 抽象类和接口都不能直接实例化,但可以引用通过实例化实现类或子类。
AbsTest t = new test(); InterText = new test()(其中test类继承AbsText抽象类,实现InterText接口。) - 接口中定义的变量只能是public static final,抽象类中的变量是普通变量
- 抽象类中可以没有抽象方法
- 接口可以被类多是小(被其他接口多继承),抽象类只能被单继承。
- 接口中没有thiis指针,没有构造方法,不能拥有任何实例字段或实例方法。