Java抽象类和接口的区别
1 抽象类和接口的区别
抽象类和接口都用于实现抽象,我们可以在他们里面声明抽象方法。
抽象类和接口都是无法实例化的。
下面列出了抽象类和接口之间详细的区别:
抽象类 | 接口 |
---|---|
抽象类可以包含抽象和非抽象方法。 | 接口只能包含抽象方法。但从Java 8开始,它还可以包含默认方法和静态方法。 |
抽象类不支持多重继承。 | 接口支持多重继承。 |
抽象类可以包含final,非final,static和非static变量。 | 接口只有static变量和final变量。 |
抽象类可以提供接口的实现。 | 接口不能提供抽象类的实现。 |
abstract关键字用于声明抽象类。 | interface关键字用于声明接口。 |
抽象类可以继承另一个Java类并实现多个Java接口。 | 一个接口只能继承另一个Java接口。 |
抽象类可以使用关键字“extends”进行继承。 | 一个接口可以使用关键字“implements”来实现。 |
Java抽象类可以包含private,protected等类成员。 | 默认情况下,Java接口的成员是public的。 |
示例: |
示例: 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
热门文章
优秀文章