普通內部類別
普通內部類別主要有兩個要點需要掌握
持有父類別引用,故可以存取父類別任何存取權限的變數、方法
內部類別在父類別外部的建立方式
public class Main{ public static void main(String args[]){ Outer outer = new Outer(); //外部类外部创建内部类 Outer.Inner inner = outer.new Inner(); inner.method(); } } class Outer{ private String value = "OuterValue"; class Inner{ public void method(){ //持有父类引用,可以访问父类private变量value System.out.println(value); } //利用.this关键字,可以返回父类对象引用 public Outer outerObject(){ return Outer.this; } } }
(推薦教學:java入門程式)
方法內部類別
直接定義在方法裡面的內部類別
#享有方法同等的權限,存取外部類別其他方法、成員變數。
可以存取該方法的參數,1.8以後,參數無需設定為final
享有同等方法局部變數的權限,可以存取定義在其前面的局部變數
只能在方法作用域中,存取方法內部類別
public class Main{ public static void main(String args[]){ Outer outer = new Outer(); outer.outerMethod("param"); } } class Outer{ public void outerMethod(String value){ class Inner { public void innerMethod(){ //可以访问方法参数 //1.8以后,内部类访问的方法参数不必设置为final System.out.println(value); } } new Inner().innerMethod(); } }
匿名內部類別
匿名內部類別其實是重點,也是我們經常會使用的知識點。
例如創建新線程
public class Main{ public static void main(String args[]){ Thread a = new Thread(new Runnable(){ @Override public void run(){ System.out.println("thread a is running;"); } }); a.start(); } }
上面的程式碼意思是創建一個實現了Runnable接口的匿名類對象,等同於下面代碼,由於書寫方便,我們經常使用第二種
public class Main{ public static void main(String args[]){ Thread a = new Thread(new RunnableImp()); a.start(); } static class RunnableImp implements Runnable{ @Override public void run(){ System.out.println("thread a is running;"); } } }
靜態內部類別
記住以下兩點
#要建立靜態內部類別對象,並不需要外部類別的物件(普通內部類別需要)
不能從靜態內部類別中存取非靜態的外部類別方法或成員變數
public class Main{ Outer.Inner inner = new Outer.Inner(); } class Outer{ private String ordValue; private static String staValue; static class Inner{ { System.out.println(staValue); //这句编译通不过 //System.out.println(ordValue); } } }
相關影片教學推薦:java影片
以上是詳細講解Java內部類的詳細內容。更多資訊請關注PHP中文網其他相關文章!