java介面和抽象類的簡單理解

正直的不良帥發表於2019-01-30

        介面:

       (1)介面內定義的變數都是public static final型別的,無論是否顯示限定這些修飾符,且必須要被顯式初始化,否則報錯:

public interface Interface1 {
    /**
     * VARIABLE1顯式新增public static final修飾符
     * VARIABLE2隱式含有public static final修飾符
     */
    public static final String VARIABLE1="AAA";
                        String VARIABLE2="BBB";
    
    /**
     * VARIABLE3未顯式初始化,程式碼變異報錯:
     * The blank final field VARIABLE3 may not have been initialized
     */
    String VARIABLE3;                    
}

        (2)介面內定義的方法都是抽象方法,即不包含任何方法實現

            a.如果實現介面的類是普通類(非抽象類),則要實現該介面的所有方法,否則編譯報錯;

            b.如果實現介面的類是抽象類,則可以只實現該介面的部分方法,否則丟擲異常;

public interface Interface2 {
    /**
     * method1方法定義顯式新增public abstract修飾符
     * method2方法隱式含有public abstract修飾符,兩個方法都是抽象方法
     */
    public abstract String method1();
                    String method2();
}
/**
 * 普通類Class1實現Interface2介面,必須實現所有介面方法
 *
 */
public class Class1 implements Interface2 {

    @Override
    public String method1() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String method2() {
        // TODO Auto-generated method stub
        return null;
    }

}
/**
 * 抽象類Class2實現Interface2介面,可以只實現方法method1
 */
public abstract class Class2 implements Interface2 {

    @Override
    public String method1() {
        // TODO Auto-generated method stub
        return null;
    }

}

    抽象類:

       (1)抽象類也是類,跟一般類一樣可以有普通的變數、帶實現的方法,可以有建構函式,但不能被例項化,只能用來繼承

         普通方法必須帶方法體,抽象方法不能帶方法體;

public abstract class AbstractClass1 {
    String variable1;//普通變數
    public static final String VARIABLE2="AAA";//定義靜態常量
    public void method1(){  }//普通方法,必須有方法體
    abstract void method2();//抽象方法,不能有方法體
    
    AbstractClass1(){//可以定義建構函式,但抽象類不能例項化,只能被繼承
        System.out.println("此為建構函式");
    }
}

       介面和抽象類還有一個最大的不同,一個類可以實現多個介面,但只能繼承一個類

       在實際應用中,介面是最為常用的,如果多個介面的實現有公共的部分,則可以考慮將這部分內容提取到抽象類中,然後繼承該抽象類。也就是說,抽象類提供公共方法的實現,可以快速開發且統一管理,又允許你的類完全實現自己的所有方法,不會出現緊耦合的問題。

 

相關文章