Java 抽象类和接口的区别(包含新特性)
关于Java抽象类和接口的区别,网上早已有各种帖子,但是在实际的运用中,我却发现了许多不同的情况,因此决定自己实验一下,写一份适合于JDK 8新特性的一份总结。
1、定义一个接口,其中包括了static方法和default方法
public interface InterfaceTest {
int i = 1;//接口中定义的变量默认为 static final
public static void OrMethod() {//接口中的static方法
System.out.println("Interface Static Ordinary method");
}
public default void dOrMethod() {//接口中的default方法
System.out.println("Interface default Ordinary method");
}
public abstract void InAbstractMethod();//接口的抽象方法,这是最常规的
public static void main(String[] args) {
OrMethod();
System.out.println(i);
}
}
2、再定义一个除了名称完全相同的接口
public interface InterfaceTest2 {
int i = 1;//接口中定义的变量默认为 static final
public static void OrMethod() {//接口中的static方法
System.out.println("Interface Static Ordinary method");
}
public default void dOrMethod() {//接口中的default方法,同InterfaceTest2的default方法是同名的
System.out.println("Interface default Ordinary method");
}
public abstract void InAbstractMethod();//接口的抽象方法,这是最常规的
public static void main(String[] args) {
OrMethod();
System.out.println(i);
}
}
3、定义一个类实现两个接口
import com.wzq.util.InterfaceTest;
import com.wzq.util.InterfaceTest2;
public class Demo02 implements InterfaceTest, InterfaceTest2 {//实现了两个接口
@Override
public void InAbstractMethod() {
// TODO Auto-generated method stub
}
@Override
public void dOrMethod() {//该类所继承的两个接口中有同名的default方法,因此必须覆写
// TODO Auto-generated method stub
InterfaceTest2.super.dOrMethod();
System.out.println("Override default Method");
}
public static void main(String[] args) {
InterfaceTest.OrMethod();//static方法只能用接口名调用
Demo02 d = new Demo02();
d.dOrMethod();//default方法只能用对象来访问
}
}