內部類
內部類就是在一個類的內部再定義一個類,比如,A 類中定義一個 B 類,
那么 B 類相對 A 類來說就稱為內部類,而 A 類相對 B 類來說就是外部類了,
1、成員內部類
2、靜態內部類
3、區域內部類
4、匿名內部類
package oop.demo14; /** * 內部類 * 內部類就是在一個類的內部再定義一個類,比如,A 類中定義一個 B 類, * 那么 B 類相對 A 類來說就稱為內部類,而 A 類相對 B 類來說就是外部類了, * 1、成員內部類 * 2、靜態內部類 * 3、區域內部類 * 4、匿名內部類 */ public class Outer { //成員私有屬性 private int id = 10; //外部類方法 public void out(){ System.out.println("這是外部類的方法"); } /** * 成員內部類 */ public class Inner{ //成員內部類方法 public void in(){ System.out.println("這是成員內部類的方法"); } //獲得外部類的私有屬性 public void getId(){ System.out.println(id); } } /** * 靜態內部類:static 修飾 */ public static class StaticInner{ //靜態內部類方法 public void in(){ System.out.println("這是靜態內部類的方法"); } //獲得外部類的私有屬性 public void getId(){ /** * 此處報錯,獲取不到 ID,因為程式初次加載 static 靜態類, * 而外部類中的私有屬性 id 還未出生,當然獲取不到 * 除非私有屬性靜態化,id 通過 static 修飾即可 * 如:private static int id = 10; */ //System.out.println(id); //此處例外 } } /** * 區域內部類 * 類似于區域變數:在方法里面定義的變數叫區域變數 * 同理,在方法里面定義的類叫區域內部類 */ public void method(){ class LocalInner{ public void localIn(){ System.out.println("這是區域內部類的方法"); } } } } /** * 一個 java 類中可以有多個 class 類,但是只能有一個 public class 類 */ class A{ public static void main(String[] args) { } }
匿名內部類
package oop.demo14; /** * 匿名內部類 */ public class Test { public static void main(String[] args) { /** * 正常 new 一個物件: * 右側 new 完賦值給左側,成為一個具體的實體 * new 一個 Apple,這個 Apple 的名字是 apple * 這是正常實體化一個物件,物件名字就叫 apple */ Apple apple = new Apple(); apple.eat(); System.out.println("------------- 分隔符 ------------"); /** * 沒有名字初始化類 * new 一個 Apple,直接呼叫方法 * 具體不知道這個 Apple 是誰,不知道它的名字 * 不用將實體保存到變數中 */ new Apple().eat(); //匿名內部類 /** * 匿名內部類可以 new 一個介面 * 我們說過,一個介面不能通過 new 出來,而是通過 implements 關鍵字去實作 * 但是在這里就比較特殊了,new 的介面相當于一個匿名內部類,這個匿名內部類通過重寫方法實作了這個介面 * 充當匿名內部類的部分如下: * new UserService() { * @Override * public void hello() { * * } * }; * 實作介面 就得重寫介面中的方法 這個方法回傳一個 userService 物件 */ UserService userService = new UserService() { @Override public void hello() { System.out.println("重寫 hello 方法"); } }; } } //定義一個 Apple 類 class Apple{ public void eat(){ System.out.println("1"); } } //定義一個 UserService 介面 interface UserService{ void hello(); }
主程式
package oop.demo14; public class Application { public static void main(String[] args) { //實體化外部類 Outer outer = new Outer(); //通過這個外部類來實體化內部類 Outer.Inner inner = outer.new Inner(); inner.in(); inner.getId(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195913.html
標籤:Java
上一篇:juc的鎖
