1.內部類
(1)內部類:在b類內部定義a類,a類就屬於b的內部類
內部類訪問外部類的特點:
它可以直接訪問外部類的成員,包括私有
外部類如何訪問內部類的成員?
在外部類的成員方法中,通過建立內部類物件的方式間接訪問...
class outer }
//外部類的成員位置
public void method()
}
(2)內部類的分類
1)成員內部類:在外部類的成員位置
class outer
}
2)區域性內部類:在外部類的區域性位置
class outer
}}
(3) 成員內部類:
1)可以直接外部類的成員,包括私有
外部類要訪問內部類(非靜態的內部類)
的成員方法:
格式:外部類名.內部類名 物件名 = new 外部類物件.new 內部類物件
class outer
}}
問題:外部類outer如何訪問內部類inner中的show()方法?
//測試類
public class outerdemo
}
2)關於成員內部類的修飾符:
private修飾: 作用:保證資料的安全性!
static修飾:可以把靜態內部類看成是外部類的成員.
特點: 靜態成員內部類訪問外部類的資料,該資料必須static修飾
3)對於外部類訪問
靜態的成員內部類
的訪問格式
外部類名.內部類名 物件名 = new 外部類名.內部類名() ;
//把靜態的成員內部類看成了外部類的成員
(4)區域性內部類
1)可以訪問外部類的成員包括私有...
在外部類的區域性位置去訪問內部類的show(),需要在區域性位置建立內部了物件,通過物件去訪問
2)區域性內部類訪問區域性變數
//定義外部類
class outer
} }}
面試題:
區域性內部類訪問區域性變數,那麼會出現問題?(jdk7以前包括jdk7,這個有問題的)
會報錯,需要給區域性變數新增final修飾...(jdk1.8不會有問題...)
2.匿名內部類
(1)前提是有乙個類或者介面
這個類可以是具體類也可以是抽象類
new 類名或者介面名
(2) 匿名內部類的本質:
是繼承了該類或者實現了該介面子類物件...
//定義乙個介面
inte***ce inter
1)呼叫介面乙個方法的時候
//定義乙個類實現這介面...
class outer
}.show();
}}
2)兩個方法呼叫
class outer
@override
public void show()
};i.show();
i.show2(); }
}
(3)實際開發中,介面作為形式引數的問題
如果形式引數是介面:
傳統的方式: 1)提供給介面的子實現類 2)內部類的方式(不需要提供子實現類)
如:
inte***ce inter
//具體類
class studentdemo
}
1)提供給介面的子實現類
class interimpl implements inter }
//測試類
public class demo
}
2)內部類的方式(不需要提供子實現類)
//測試類
public class demo
};i.study();
}}
(4) 匿名內部類面試題:
按照要求,補齊**
inte***ce inter
class outer
class outerdemo
}要求在控制台輸出」helloworld」
分析:outer.method() :當前這個method方法是靜態方法
outer.method().show(); >返回乙個物件.show(),又由於show()方法是乙個介面中的方法,返回值是乙個介面型別
class outer
};}}
Java之內部類
1 內部類的概念 宣告在另外乙個類裡面的類就是內部類。2 內部類的4種形式 1 靜態內部類 2 非靜態成員內部類 3 區域性內部類 4 匿名內部類 1 語法格式 在匿名子類中呼叫父類的無參構造 new 父類 在匿名子類中呼叫父類的有參構造 new 父類 實參列表 介面沒有構造器,這裡表示匿名子類呼叫...
Java之內部類
內部類 inner class 就是定義在另外乙個類裡面的類。與之對應,包含內部類的類被稱為外部類。內部類的主要作用如下 內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同乙個包中的其他類訪問該類 內部類的方法可以直接訪問外部類的所有資料,包括私有的資料 內部類所實現的功能使用外部類同樣...
java物件導向(內部類)
內部類 將乙個類定義在另乙個類的裡面,對裡面那個類就稱為內部類 內建類,巢狀類 訪問特點 1,內部類可以直接訪問外部類中的成員,包括私有成員.2,而外部類要訪問內部類中的成員必須要建立內部類的物件.內部類的訪問規則 1,內部類可以直接訪問外部類的成員,包括私有.之所可以直接訪問外部類中的成員,是因為...