接口
public interface interfaceTest {
public int i = 0;
int j = 0;
void mothod1();
public void mothod2();
default void mothod3(){
System.out.println("interface------------------mothod3");
}
default void mothod4(){}
static void mothod6(){
System.out.println("interface--------mothod6");
}
}
-
接口可以有成员变量和静态变量,但必须赋值,因为默认都是final的,并且只支持public和缺省的
-
支持缺省和public的抽象方法,和静态方法,但静态方法只能被接口调用
-
可以有default的方法,可以写方法体也可以不写
抽象类
public abstract class abstactClass {
public abstactClass() {
}
public int i;
public static int j;
private int k;
protected int z;
int a;
public void mothod1(){};
private void mothod2(){};
protected void mothod3(){};
public static void mothod4(){};
private static void mothod5(){
System.out.println("------------");
};
protected static void mothod6(){};
public void mothod7(){
System.out.println("------------");
}
private void mothod8(){
System.out.println("------------");
}
protected void mothod9(){
System.out.println("------------");
}
}
}
-
抽象类可以有构造方法
-
抽象类中可以有普通成员变量和静态变量
-
抽象类中可以包含非抽象的普通方法
-
抽象类中的抽象方法的访问类型可以是public,
-
抽象类中可以包含静态方法,接口中不能包含静态方法
两者在应用上的区别
一个类可以实现多个接口,但只能继承一个抽象类,接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码