首頁  >  文章  >  Java  >  詳細講解Java內部類

詳細講解Java內部類

王林
王林轉載
2020-04-23 16:25:402406瀏覽

詳細講解Java內部類

普通內部類別

普通內部類別主要有兩個要點需要掌握

持有父類別引用,故可以存取父類別任何存取權限的變數、方法

內部類別在父類別外部的建立方式

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中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除