1. 程式人生 > >內部類的簡單剖析

內部類的簡單剖析

內部類的概念:在一個類中再定義一個類,那麼這個類就稱為內部類

在一個類中使用內部類,可以在內部類中直接存取其所在類的私有成員變數;

內部類分為成員內部類、區域性內部類、匿名內部類;下面我們來介紹:

成員內部類:

成員內部類的語法:

public class OuterClass{//外部類

    public class InnerClass{//內部類

}}

在內部類中可以隨意的使用外部類的成員方法和成員變數,哪怕它被修飾了private;

內部類的例項一定要繫結在外部類的例項上,如果從外部類中初始化一個內部類物件,那麼內部類物件就會繫結在外部類物件上,內部類的初始化方法與其他類的初始化相同,使用New關鍵字。內部類可以訪問其他外部類成員,但內部類的成員只有在內部類的範圍內是可知的,不能被外部類使用。

public class OuterClass{

/*

修飾符為private的成員變數

*/

privste int i=0;

private void g(){}

//內部類

class InnerClass{

    void f(){

//修飾符為private的類成員可以在內部類中隨意使用

        g();

        i++;

}}}

內部類中的變數與外部類中的變數可以互動使用;

內部內向上轉型為介面:當將一個修飾符為privste的內部類向上轉型為其父類物件,或者直接向上轉型為一個介面,在程式中可以完全隱藏內部類的具體實現過程。向外部提供一個介面,在介面中宣告一個方法,如果實現該介面的內部類中實現該介面的方法,就可以定義多個內部類以不同的方法實現介面中的同一個方法;

使用this關鍵字獲取內部類與外部類的引用:

實現具體程式碼如下:

public class C{

    private x;

    private class inner{

        private x=9;

        public void Doit(int x){

            x++;//呼叫的是形參x

            this.x++;//呼叫的是內部類的x;

            C。this.x++;//呼叫的是外部類的x;

}}}

區域性內部類:

內部類不僅可以在類中進行定義,也可以在類中的區域性位置進行定義,如在類的方法或者任意的作用域中,都可以成為是內部類;

區域性內部類實現程式碼如下:

interface Outin{}//定義一個介面

class outin1{

    public Outin doit(final String x){//形參為final型別

        class innerClass implements Outin{//在doit()方法中定義一個內部類

            innerClass(String s){s=x;System.out.print(s);}}

         return new Outin("doit");}}

匿名內部類:

實現程式碼:

public class S{

  public S(){

new x(){//方法};}}//宣告匿名內部類

靜態內部類:將內部類修飾為static,就i是靜態內部類了;

內部類的繼承:比普通類的繼承要複雜;

實現程式碼如下:

class ClassA{class ClassB}

public class OutputInputClass extends ClassA.ClassB{//繼承內部類B

    public OutputInputClass(ClassA a){

            a.super();}}

繼承內部類時,必須要給該類的構造方法一個引數,該類的構造方法是要繼承的內部類的外部類的引用,同時用引數呼叫super()方法,才能完成繼承。