黑馬程序員--Java基礎學習筆記【參數傳遞、訪問控制符、內部類】

 

 ------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------    

 

形式參數和返回值問題:基本類型傳值,引用類型傳址

包聲明、導包、類聲明的的順序關係:packagecn.itcast; import java.util.*; public class Demo{}

 

  • 訪問控制修飾符(權限修飾符)

protected 可以被子類及同一個包中的類使用

protected 受保護的權限,成員修飾成員只給子類

protected修飾的成員,只能在子類中super調用

默認訪問控制的成員變量和方法可以被同一個包中的類調用

訪問控制符修飾類

         public 修飾的類可以被任何一個類使用;

         默認訪問控制的類只可以被同一個包中的類使用

訪問控制符修飾成員

wKiom1YEiwDj5EQ3AAFZCkaP2iM328.jpg

 

  • 內部類:

         定義在類的內部,根據位置不同,分爲成員內部類和局部內部類

內部類可以直接訪問所在外部類的成員,包括私有

外部類要訪問內部類的成員,要創建對象

 

成員內部類創建對象

                   外部類名.內部類名 對象名 = 外部類對象.內部類對象

         成員內部類的修飾符:

                   private 保證數據安全性

                   static 讓數據訪問更方便,被靜態修飾的成員內部類只能訪問外部類的靜態成員

         局部內部類:

                   可以創建內部類對象,通過對象調用內部類方法,來使用局部內部類功能

         局部內部類的方法,訪問局部變量,變量必須final 修飾,爲什麼?

 

/*

 * 局部內部類方法,訪問局部變量,變量必須 final 修飾,爲什麼必須有 final

 * final,解決什麼問題

 *

 * 生命週期:

 *  方法的生命週期,沒有對象長

 *  out 方法運行出棧,變量 x 就會死亡

 *  用了 Inner 類的對象,調用方法 in,造成變量已經死亡不能訪問

 *

 *  變量加 final 修飾:

 * 

 *  final修飾變量 x,和內存的生命週期沒有關係

 *  final本身含義固定變量值,終身不變

 * 

 *  javac編譯的時候,直接將內部類方法變量 x,直接替換成 1

 */

publicclassInnerClass {

 

    publicstaticvoid main(String[] args) {

       Outerouter= newOuter();

       Interfaceinterface1= outer.out();

       interface1.in();

    }

 

}

 

interface Interface {

    publicabstractvoid in();

}

 

class Outer {

    public Interface out() {

       finalintx = 1;

       class Inner implements Interface {

           publicvoid in() {

              /*

               * Cannot refer to the non-final local variablex defined               * in an enclosing scope

               */

              System.out.println("局部內部類的方法in " + x);

           }

       }

       returnnew Inner();

    }

}

 

  • 匿名內部類

    如果在一段程序中需要創建一個類的對象(通常這個類需要實現某個接口或者繼承某個類),而且對象創建後,這個類的價值也就不存在了,這個類可以不必命名,稱之爲匿名內部類。

/*

 * obj 用匿名類所實現的接口或所繼承的父類類型聲明的引用

 * SuperType 匿名類所要實現的接口或繼承的父類

 *

 *

 */

SuperTypeobj = new SuperType(…){

    // 匿名中定義的成員變量或方法

    … … …

};

 

  • 定義匿名內部類

// 定義接口 Action,含有抽象方法 execute

interface Action{

    publicabstractvoid execute();

}

 

publicclassMain {

 

    publicstaticvoid main(String[] args) {

      

       // 創建實現接口 Action 的匿名內部類對象

       Actionaction= newAction() {

           // 重寫接口中的方法

           @Override

           publicvoid execute() {

              System.out.println("匿名內部類");

           }

       };

      

       // 調用匿名內部類對象的 execute 方法

       action.execute();

    }

 

}

 

  • 匿名內部類面試題

//按照要求,補齊代碼:要求在控制檯輸出 "HelloWorld"

interface Inter {

    publicabstractvoid show();

}

 

class Outer1 {

    // 補齊代碼

    publicstatic Inter method() {

       returnnew Inter() {

           @Override

           publicvoid show() {

              System.out.println("Hello World!!");

           }

       };

    }

}

 

publicclassOuterDemo {

 

    publicstaticvoid main(String[] args) {

       // 類名.靜態方法,方法調用鏈,另一個方法 show

       // 要求方法返回的必須是對象

       // method 返回的應該是一個對象,是接口 Inter 的實現類對象

       Outer1.method().show();

    }

 

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章