day16_物件導向(訪問控制許可權丶內部類丶引用型別使用總結)
訪問控制許可權
Java許可權修飾符public、protected、 (預設)、 private置於類的成員定義前,用來限定物件對該類成員的訪問許可權。
總結
- private 表示私有的,只能在本類中訪問
- public 表示公開的,在任何位置都可以訪問
- “預設”表示只能在本類,以及同包下訪問。
- protected表示只能在本類、同包、子類中訪問。
訪問控制修飾符可以修飾什麼
- 屬性(4個都能用)
- 方法(4個都能用)
- 類(public和預設能用,其它不行。)
- 介面(public和預設能用,其它不行。)
內部類
當一個事物的內部,還有一個部分需要一個完整的結構進行描述,而這個內部的完整的結構又只為外部事物提供服務,那麼整個內部的完整結構最好使用內部類。在Java中,允許一個類的定義位於另一個類的內部,前者稱為內部類,後者稱為外部類。內部類主要分類:
成員內部類作為類的成員的角色:
- 和外部類不同,Inner class還可以宣告為private或protected;
- 可以呼叫外部類的結構
- Inner class 可以宣告為static的,但此時就不能再使用外層類的非static的成員變數;
成員內部類作為類的角色:
- 可以在內部定義屬性、方法、構造器等結構
- 可以宣告為abstract類 ,因此可以被其它的內部類繼承
- 可以宣告為final的
- 編譯以後生成OuterClass$InnerClass.class位元組碼檔案(也適用於區域性內部類)
注意
- 非static的成員內部類中的成員不能宣告為static的,只有在外部類或static的成員內部類中才可宣告static成員。
- 外部類訪問成員內部類的成員,需要“內部類.成員”或“內部類物件.成員”的方式
- 成員內部類可以直接使用外部類的所有成員,包括私有的資料
- 當想要在外部類的靜態成員部分使用內部類時,可以考慮內部類宣告為靜態的
訪問特點
- 內部類可以直接訪問外部類的成員,包括私有成員。
- 外部類要訪問內部類的成員,必須要建立內部類的物件。
建立內部類物件格式:
- 外部類名.內部類名 物件名 = new 外部型別().new 內部型別();
程式碼示例
package demo05;
class Outer {
private int s = 111;
public class Inner {
private int s = 222;
public void mb() {
int s = 333;
System.out.println(s); // 區域性變數s
System.out.println(this.s); // 內部類物件的屬性s
System.out.println(Outer.this.s); // 外部類物件屬性s
}
}
public void ma() {
Inner i = new Inner();
i.mb();
}
}
public class InnerTest {
public static void main(String args[]) {
//外部類名.內部類名 物件名 = new 外部型別().new 內部型別();
Outer.Inner inner = new Outer().new Inner();
inner.mb();
}
}
區域性內部類
如何宣告區域性內部類
如何使用區域性內部類
- 只能在宣告它的方法或程式碼塊中使用,而且是先宣告後使用。除此之外的任何地方都不能使用該類
- 但是它的物件可以通過外部方法的返回值返回使用,返回值型別只能是區域性內部類的父類或父介面型別
區域性內部類的特點
- 內部類仍然是一個獨立的類,在編譯之後內部類會被編譯成獨立的.class檔案,但是前面冠以外部類的類名和$符號,以及數字編號。
- 只能在宣告它的方法或程式碼塊中使用,而且是先宣告後使用。除此之外的任何地方都不能使用該類。
- 區域性內部類可以使用外部類的成員,包括私有的。
- 區域性內部類可以使用外部方法的區域性變數,但是必須是final的。由區域性內部類和區域性變數的宣告週期不同所致。
- 區域性內部類和區域性變數地位類似,不能使用public,protected,預設,private
- 區域性內部類不能使用static修飾,因此也不能包含靜態成員
匿名內部類
匿名內部類是區域性內部類的一種。因為這個類沒有名字而得名,叫做匿名內部類。匿名內部類不能定義任何靜態成員、方法和類,只能建立匿名內部類的一個例項。一個匿名內部類一定是在new的後面,用其隱含實現一個介面或實現一個類。
格式:
匿名內部類的特點
- 匿名內部類必須繼承父類或實現介面
- 匿名內部類只能有一個物件
- 匿名內部類物件只能使用多型形式引用
以介面為例,匿名內部類的使用,程式碼如下:
定義介面
public interface Compute {
int sum(int a, int b );
}
定義類使用介面
class MyMath{
public int sum(Compute compute, int a ,int b){
return compute.sum(a, b);
}
}
定義測試類通常在方法的形式引數是介面或者抽象類時,也可以將匿名內部類作為引數傳遞。程式碼如下:
class Test{
public static void main(String[] args) {
int sum = new MyMath().sum(new Compute() {
@Override
public int sum(int a, int b) {
return a + b;
}
;
}, 3, 5);
System.out.println(sum);
}
}
引用型別使用總結
實際的開發中,引用型別的使用非常重要,也是非常普遍的。我們可以在理解基本型別的使用方式基礎上,進一步去掌握引用型別的使用方式。基本型別可以作為成員變數、作為方法的引數、作為方法的返回值,那麼當然引用型別也是可以的。
- 類作為成員變數時,對它進行賦值的操作,實際上,是賦給它該類的一個物件。
- 類作為方法引數:在編寫程式中,會經常碰到呼叫的方法要接收的是一個類型別的情況,那麼這時,要向方法中傳入該類的物件
- 類作為方法返回值:寫程式呼叫方法時,我們以後會經常碰到返回一個類型別的返回值,那麼這時,該方法要返回一個該類的物件。
- 抽象類作為成員變數時,對它進行賦值的操作,實際上,是賦給它該抽象類的一個子類物件
- 抽象類作為方法引數:開發中,抽象類作為方法引數的情況也很多見。當遇到方法引數為抽象類型別時,要傳入一個實現抽象類所有抽象方法的子類物件。
- 抽象類作為方法返回值:抽象類作為方法返回值的情況,也是有的,這時需要返回一個實現抽象類所有抽象方法的子類物件。
- 介面作為成員變數時,對它進行賦值的操作,實際上,是賦給它該介面的一個子類物件。
- 介面作為引數時,傳遞它的子類物件。
- 介面作為返回值型別時,返回它的子類物件。
相關文章
- day11_物件導向(封裝丶static丶this)物件封裝
- day10_物件導向(屬性丶方法)①物件
- 物件導向--內部屬性型別物件型別
- 使用nginx控制ElasticSearch訪問許可權NginxElasticsearch訪問許可權
- 物件導向之內部類物件
- Java 訪問許可權控制(6)Java訪問許可權
- SQLServer控制使用者訪問許可權表SQLServer訪問許可權
- Think IN JAVA --------JAVA訪問許可權控制Java訪問許可權
- k8s結合jumpserver做kubectl許可權控制 使用者在多個namespaces的訪問許可權 rbac許可權控制K8SServernamespace訪問許可權
- PHP 物件導向 (一)許可權修飾符PHP物件
- 《JavaScript物件導向精要》之一:基本型別和引用型別JavaScript物件型別
- Java物件導向總結(多型)Java物件多型
- Teradata訪問許可權及實體型別縮寫訪問許可權型別
- JAVA物件導向基礎--N種內部類Java物件
- SAP PLM文件許可權物件的控制級別物件
- [物件導向總結]物件
- 物件與引用,static關鍵字,程式碼塊,包,訪問許可權修飾符物件訪問許可權
- 論Java訪問許可權控制的重要性Java訪問許可權
- 如何講清楚 Java 物件導向的問題與知識?(類與物件,封裝,繼承,多型,介面,內部類...)Java物件封裝繼承多型
- 前端新手祕籍丶前端
- java的訪問許可權Java訪問許可權
- Swift 中 Selector 方法的訪問許可權控制問題Swift訪問許可權
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- Quarkus中基於角色的許可權訪問控制教程
- js 物件導向總結JS物件
- 物件導向概念總結物件
- geoserver控制服務訪問許可權-類似百度地圖的keyServer訪問許可權地圖
- nodeJS丶Buff使用及相關APINodeJSAPI
- 內部類總結
- Guest許可權突破——許可權提升方法總結(轉)
- JS物件導向Object型別JS物件Object型別
- DRF內建許可權元件之自定義許可權管理類元件
- 使用呼叫者許可權實現Schema導向操作
- mongoDB 3.0 安全許可權訪問MongoDB
- Swift4.0 訪問許可權Swift訪問許可權
- AndroidPermission訪問許可權大全Android訪問許可權
- public, private, protected 訪問許可權訪問許可權
- PostgreSQL訪問許可權查詢函式彙總和使用舉例SQL訪問許可權函式