abstract和interface的区别
- 抽象类可以有构造方法,接口中不能有构造方法。
public abstract class AbstractDemo {
public AbstractDemo() {
}
}
public interface InterDemo {
//Interface abstract methods cannot have body
// public InterDemo(){
//
// };
}
-
抽象类中可以有普通成员变量,接口中没有普通成员变量(接口中可以有变量,但是无论你怎么写,最后都是public static final的。)
-
抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。(默认public abstract类型)
public abstract class AbstractDemo {
int num=0;
public AbstractDemo() {
}
public int getNum(){
return 0;
}
public abstract int get();
}
public interface InterDemo {
int num=0;
//Modifier 'public' is redundant for interface methods
int get();//默认时public abstract类型不需要添加
//Illegal combination of modifiers: 'final' and 'abstract'
//final int get();
//Static methods in interfaces should have a body
//static int get();
}
-
抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
-
抽象类中可以包含静态方法,接口中不能包含静态方法。
//Static methods in interfaces should have a body
//static int get();
-
类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
-
一个类可以实现多个接口,但只能继承一个抽象类。