java 接口默認修飾符


概論:

  java接口可以是public 的,也可以是friendly的,但一定是abstracted的。

  java接口里的方法只能是public的、abstract的。

  java接口里的成員變量只能是public 的,static 的,final的;並且必須賦初值,否則通不過編譯。

  C++支持多重繼承,如果兩個父類有相同的成員變量,處理起來比較困難。java 接口的成員變量之所以這樣設計,就是為了解決C++ 中的這個問題。成員變量必須是static 的,所以接口里的成員變量就不再屬於某個對象,而是屬於這個接口的。子類的對象里就沒有父類的這個成員變量。

  那怎樣使用父類里的成員變量呢?

public interface Father {
    int i = 0;
}
public interface Father2 {
    int i = 2;
}
public class Son implements Father, Father2 {
    static int i = 3;
    public static void main(String[] args) {
        System.out.println(Father.i);
        System.out.println(Father2.i);
        System.out.println(i);
    }
}

 接口問題:

  實現兩個接口,這兩個接口里有兩個簽名相同,返回值不同的方法。一個類同時實現,報錯。


 

package test;

public interface InterfaceTest {
  void todo();
}

/**
* 以下是反編譯的內容,接口默認是abstract的,

* 接口里的方法默認都是public的、abstract的。
*
package test;

public abstract interface InterfaceTest {
  public abstract void todo();
}

*/


 上面用得是第三方的一個反編譯工具,

 用 Eclipse 反編譯插件編譯后的結果卻不同,如下:

package test;

public  interface InterfaceTest {
  void todo();
}


接下來一探究竟:

1.創建一個java 接口:

public interface TestInterface {
    void say();
}

2.為這個接口添加一個abstract 修飾符

public abstract interface TestInterface {
    void say();
}

結果一切正常,它的實現類運行毫不影響。由此可知java接口默認就是abstract的。

3、去掉這個接口的public 修飾符

interface TestInterface {
    void say();
}

不報錯;同包下的實現類運行正常;異包下的實現類通不過編譯。由此可知java接口本身可以是friendly的(但不可以是private 和protected 的,這和類的聲明是一致的)。

4、為這個接口里的一個方法添加private 修飾符

public interface TestInterface {
    private void say();
}

通不過編譯。由此可知java接口里的方法不可以是private 的。

5、為這個接口里的一個方法添加protected 修飾符

public interface TestInterface {
    protected void say();
}

通不過編譯。由此可知java接口里的方法不可以是protected 的。

6、為這個接口里的一個方法添加abstract 修飾符

public interface TestInterface {
    abstract void say();
}

一切正常,它的實現類運行毫不影響。由此可知java接口里的方法默認就是abstract 的。


 總結:

   java接口本身默認是abstract的;可以是public的,也可以是friendly的,但不可以是private 的,不可以是protected的(否則通不過編譯)。

     java接口里的方法默認是abstract的,public 的;不可以private 的,不可以是protected 的。

     還得出一個結果,這個第三方的反編譯工具更准確。下載地址:https://i.cnblogs.com/Files.aspx 文件名:javaDecompiler.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM