1. 程式人生 > >Java架構-JavaSE(四)之介面、訪問控制

Java架構-JavaSE(四)之介面、訪問控制

閱讀目錄(Content)

一、介面
  1.1、介面與抽象類的區別
  1.2、介面中的方法都是抽象方法
  1.3、介面中的變數都是靜態常量(public static final修飾)
  1.4、一個類可以實現多個介面  
  1.5、一個介面可以繼承多個父介面
  1.6、介面的作用   
  1.7、例項  
二、訪問控制
  2.1、修飾類
  2.2、修飾屬性和方法
上面我們學習了幾個修飾符,在開發中經常會用的到,所以必須熟練的掌握。接下來我學習一下介面和訪問控制。
一、介面
一系列方法的宣告,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。

1.1、介面與抽象類的區別
     抽象類也是類,除了可以寫抽象方法以及不能直接new物件之外,其他的和普通類沒有什麼不一樣的。介面已經另一種型別了,和類是有本質的區別的,所有不能用類的標準去衡量介面。

      宣告類的關鍵字是class,宣告介面的關鍵字是interface。

      抽象類是用來被繼承的,java中的類是單繼承。
          類A繼承了抽象類B,那麼類A的物件就屬於B型別了,可以使用多型
          一個父類的引用,可以指向這個父類的任意子類物件
          注:繼承的關鍵字是extends

      介面是用來被類實現的,java中的介面可以被多實現。
          類A實現介面B、C、D、E..,那麼類A的物件就屬於B、C、D、E等型別了,可以使用多型
          一個介面的引用,可以指向這個介面的任意實現類物件
          注:實現的關鍵字是implements

1.2、介面中的方法都是抽象方法
    介面中可以不寫任何方法,但如果寫方法了,該方法必須是抽象方法
   例如:
   public interface Action{
   public abstract void run();

          //預設就是public abstract修飾的
          void test();
          public void go();
      }

1.3、介面中的變數都是靜態常量(public static final修飾)
    介面中可以不寫任何屬性,但如果寫屬性了,該屬性必須是public static final修飾的靜態常量。
   注:可以直接使用介面名訪問其屬性。因為是public static修飾的
   例如:
   注:宣告的同時就必須賦值.(因為介面中不能編寫靜態程式碼塊)
   public interface Action{
   public static final String NAME = “tom”;
   //預設就是public static final修飾的
   int AGE = 20;
   }
   main:
   System.out.println(

Action.NAME);
   System.out.println(Action.AGE);
1.4、一個類可以實現多個介面 
1.5、一個介面可以繼承多個父介面
  //編譯報錯
System.out.println(o instanceof String);

    注:
    System.out.println(o instanceof X);
    如果o是一個介面型別宣告的變數,那麼只要X不是一個final修飾的類,該程式碼就能通過編譯,至於其結果是不是true,就要看變數o指向的物件的實際型別,是不是X的子類或者實現類了。

    注:一個引用所指向的物件,是有可能實現任何一個介面的。(java中的多實現)

1.6、介面的作用   
    介面的最主要的作用是達到統一訪問,就是在建立物件的時候用介面建立,【介面名】 【物件名】=new 【實現介面的類】,這樣你像用哪個類的物件就可以new哪個物件了,不需要改原來的程式碼。

假如我們兩個類中都有個function()的方法,如果我用介面,那樣我new a();就是用a的方法,new b()就是用b的方法

這個就叫統一訪問,因為你實現這個介面的類的方法名相同,但是實現內容不同

總結:

1、Java介面中的成員變數預設都是public,static,final型別的(都可省略),必須被顯示初始化,即介面中的成員變數為常量(大寫,單詞之間用"_"分隔)

2、Java介面中的方法預設都是public,abstract型別的(都可省略),沒有方法體,不能被例項化

3、Java介面中只能包含public,static,final型別的成員變數和public,abstract型別的成員方法

4、介面中沒有構造方法,不能被例項化

5、一個介面不能實現(implements)另一個介面,但它可以繼承多個其它的介面

6、Java介面必須通過類來實現它的抽象方法

7、當類實現了某個Java介面時,它必須實現介面中的所有抽象方法,否則這個類必須宣告為抽象類

8、不允許建立介面的例項(例項化),但允許定義介面型別的引用變數,該引用變數引用實現了這個介面的類的例項

9、 一個類只能繼承一個直接的父類,但可以實現多個介面,間接的實現了多繼承.

1.7、例項  
  二、訪問控制
    public protected default private是java中的訪問控制修飾符.
   注:這裡的default的意思是什麼都不寫
   例如:
   public String name;
   protected String name;
   //default就表示這種情況
   String name;
   private String name;

2.1、修飾類
    1)普通類

只能使用public和default來修飾原始檔中編寫的java類
   public表示其他任何地方都有許可權訪問這個類
  default表示只有和當前類在同一個包的類才有許可權訪問

例如: Test.java中有倆個類
    2)內部類

四個修飾符可以修飾特定的內部類
 2.2、修飾屬性和方法
    四個修飾都可以修飾類中的屬性和方法,那麼就以修飾屬性為例來說明.(效果和修飾方法是一樣的)

public class Person{
public String pubStr = “pubStr”;
protected String proStr = “proStr”;
String defStr = “defStr”;
private String priStr = “priStr”;
}

    從四個地方測試這些屬性的可見性:
                類中     同包類中    子類中    不同包類中
    public         Y            Y            Y            Y
    protected     Y            Y            Y            N
    default         Y            Y            N            N
    private         Y            N            N            N    
    
    注:這裡的子類中預設指的是不同包下面的子類

為什麼某些人會一直比你優秀,是因為他本身就很優秀還一直在持續努力變得更優秀,而你是不是還在滿足於現狀內心在竊喜!
合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

還是那句話,希望此文能幫到大家的同時,也聽聽大家的觀點。歡迎留言討論,加關注,分享你的高見!持續更新!

To-陌霖Java架構

分享網際網路最新文章 關注網際網路最新發展