1. 程式人生 > >java內部類 和外嵌類

java內部類 和外嵌類

/*
    day in 2015 10 08
    night 
    @damon
    關於內部類的理解

    :java 中支援在一個類中定義內部類,而類本身稱為外嵌類
    內部類的外嵌類的變數在內部類仍然有效,內部類的類中的方法
    也可以呼叫外部類中的方法。

    內部類中不能傻宣告類變數和類方法,外嵌類中可以用內部類宣告物件
    作為外嵌類的成員

    內部類僅僅作為外嵌類使用,其他的類不能用某個類來宣告物件

*/

//下面將做一個書上的例子做為理解

//class RedCow
class RedCowOut//外嵌類
{
    static String formName;//static 靜態變數
RedCow cow;//內部類宣告物件 RedCowOut()//建構函式的宣告 { //無內容 } RedCowOut(String s)//帶引數的建構函式,進行初始化 { cow = new RedCow(150,122,5000);//初始化體長和價格 formName = s;//向建構函式傳入初始化用的類屬性 } void showCow()//宣告一個顯示資訊的函式 用來將資訊輸出 { //外嵌類可以 用內部類宣告物件,然後用物件 呼叫 內部類中的方法 cow.speack();//直接呼叫內部類中的輸出資訊的方法
} class RedCow//宣告外類 { //定義屬性file String cowName = "reddada";//初始化 //宣告體長 價格 int height,weight,price; RedCow(int h,int w,int p)//建構函式的宣告 { height = h;//通過建構函式傳入值 進行函式的初始化 weight = w; price = p; } void
speack() { System.out.println("name "+" "+cowName+"height"+" "+height+"weight"+weight+" address "+formName); } }//內部類 結束 }//外部類結束 public class test1 { public static void main(String[] args) { RedCowOut dada = new RedCowOut("圖書館");//傳入初始化用的引數 //dada.showCow();//直接呼叫外嵌類中的顯示函式 封裝呼叫 //另一種呼叫方式 dada.cow.speack();//直接呼叫 外嵌類中宣告的內部類的物件 然後再呼叫 內部類的方法 System.out.println("Hello World!"); } }

值得注意的是java編譯器生成內部類的位元組碼檔案的名字和通常類的類不同,內部類對應的位元組碼檔案格式是:“外嵌類$內部類”。
內部類可以被修飾為static內部類。