Java抽象类和接口的区别

1 抽象类和接口的区别

抽象类和接口都用于实现抽象,我们可以在他们里面声明抽象方法。

抽象类和接口都是无法实例化的。

下面列出了抽象类和接口之间详细的区别:

抽象类 接口
抽象类可以包含抽象和非抽象方法。 接口只能包含抽象方法。但从Java 8开始,它还可以包含默认方法和静态方法。
抽象类不支持多重继承。 接口支持多重继承。
抽象类可以包含final,非final,static和非static变量。 接口只有static变量和final变量。
抽象类可以提供接口的实现。 接口不能提供抽象类的实现。
abstract关键字用于声明抽象类。 interface关键字用于声明接口。
抽象类可以继承另一个Java类并实现多个Java接口。 一个接口只能继承另一个Java接口。
抽象类可以使用关键字“extends”进行继承。 一个接口可以使用关键字“implements”来实现。
Java抽象类可以包含private,protected等类成员。 默认情况下,Java接口的成员是public的。

示例:
public abstract class Shape{
   public abstract void draw();
}

示例:
public interface Drawable{
  void draw();
}

简单来说,抽象类实现部分抽象(0~100%),而接口实现完全抽象(100%)。

2 抽象类和接口的示例

让我们看一个简单的示例,我们同时使用接口和抽象类。

/**
 * 一点教程网 - http://www.yiidian.com
 */
//创建4个方法的接口
interface A{
    void a();
    void b();
    void c();
    void d();
}

//创建B类实现A接口
abstract class B implements A{
    public void c(){
        System.out.println("I am C");
    }
}

//创建抽象类B的子类M
class M extends B{
    public void a(){
        System.out.println("I am a");
    }
    public void b(){
        System.out.println("I am b");
    }
    public void d(){
        System.out.println("I am d");
    }
}

//测试类,调用A接口的方法
class Test5{
    public static void main(String args[]){
        A a=new M();
        a.a();
        a.b();
        a.c();
        a.d();
    }
}

输出结果为:

I am a
I am b
I am C
I am d

 

热门文章

优秀文章