区别:
1.抽象类本质上是一个类,可以被其他类继承,但只能被继承一个;而接口属于interface类型,一个类可以去实现多个interface。
2.抽象类中可以定义各种类型的属性方法,而接口中的成员变量只能是public static final的(省略不写),且只能是方法。
public abstract class abtest {
private static String str;
public void test(){
System.out.println("test");
}
protected static String returnStr(){
return str = "skr~";
}
}
从设计目的上分析
抽象类可以作为一些现存的类的一个公共特征的提取,一定是重构的时候进行的,先有现有类,然后抽象成的抽象类,然后它们继承于它。尽管抽象类中可以有方法的实现(以静态代码的方式),但是作为抽象类来说,一个抽象的东西,是没办法具体化的,所以抽象类没有办法实例化,从代码角度来看的话也很好理解,若抽象类中有抽象方法,即使能够实例化,那我们又怎么去使用抽象方法呢?
接口更像是对于代码的规范设计,实现了接口的类,必须实现接口规定的方法,接口不管具体的实现方法。
抽象代表着抽离本质,所以抽象是something is a something的过程,接口意味着规范,是something like a something的过程。
当我们关注类本质的时候,我们需要抽象出抽象类,当我们关注类的操作规范的时候,我们才去关注接口。