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(
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架構
分享網際網路最新文章 關注網際網路最新發展