当前位置:首页 > 分类 > JAVA入门 > 抽象类和接口有什么区别

抽象类和接口有什么区别

接口与抽象类的关系很微妙,特别是在JAVA8以后。

如下,写法看起来几乎一模一样。

public abstract class TestAbstractClass extends Object implements Cloneable,Serializable{

public abstract void a();

public void b(){ System.out.println("youfengxin.com");}
}

class TestAbstractClassChild extends TestAbstractClass{

@Override
public void a() {}

public static void main(String[] args) {
new TestAbstractClassChild().b();
}
}
public interface TestInterface extends Cloneable,Serializable{

void a();

default void b(){ System.out.println("youfengxin.com");}
}

class TestCalss implements TestInterface{

@Override
public void a() {}

public static void main(String[] args) {
new TestCalss().b();
}
}


1,写法上的区别

    A,接口使用关键字interface;抽象类使用关键字abstract。

    B,接口可以多继承接口;抽象类单继承类,多实现接口。

    C,定义抽象方法时,接口不用特殊处理;抽象类需使用关键字abstract。

    D,定义普通方法时,java8开始接口也可以使用关键字default定义普通方法;抽象类不需要处理。

    E ,接口实现类需实现所有抽象方法;抽象类子类可逐级使用抽象类实现抽象方法。

    F,都不能实例化,但可以作为声明对象。

2,用法上的区别

    根据上面写法上的区别可知,接口比抽象类更抽象,因为它里面的方法默认现实了抽象,不像抽象类那样需要使用关键字标识。那么需要完全抽象的时候就可以使用接口,只赋值定义规范;而那些有部分功能相同,又有些功能不同时则使用抽象类,把相同的部分提取出来放在抽象类中实现,然后继承抽象类各自实现不同的地方。