學(xué)習(xí)內(nèi)容
- 內(nèi)部類(lèi)
- 匿名內(nèi)部類(lèi)與匿名對(duì)象
1.內(nèi)部類(lèi)
- 盡量在一個(gè)文件里面定義一個(gè)類(lèi)
- 如果需要在類(lèi)的內(nèi)部定義一個(gè)類(lèi)博投,那這各類(lèi)救市內(nèi)部類(lèi)
- 我們?nèi)绻脙?nèi)部類(lèi)交煞,原因:希望封裝對(duì)應(yīng)的功能纺座,這些功能是為我們不希望直接暴露給外部的
- 內(nèi)部類(lèi)是外部類(lèi)的一個(gè)成員
- 內(nèi)部類(lèi)可以直接訪問(wèn)外部類(lèi)的數(shù)據(jù)
- 外部類(lèi)無(wú)法調(diào)用內(nèi)部類(lèi)的數(shù)據(jù)
- Car bz = new Car();
- Car.Engine engine = bz.new Engine();
- 內(nèi)部類(lèi)有相應(yīng)的修飾符:public硝枉、protected抹估、final缠黍,外部類(lèi)只能使用public來(lái)修飾
- 內(nèi)部類(lèi)分類(lèi):普通內(nèi)部類(lèi)——屬于對(duì)象,必須使用對(duì)象來(lái)調(diào)用棋蚌;靜態(tài)內(nèi)部類(lèi)——屬于類(lèi)嫁佳,必須用類(lèi)來(lái)調(diào)用,而且靜態(tài)內(nèi)部類(lèi)不能調(diào)用非靜態(tài)數(shù)據(jù)
public class Car {
private int wheels;
public void start(){
wheels = 4;
//內(nèi)部使用內(nèi)部類(lèi)
new Engine();
}
protected static class Engine{
public int a;
public Engine(){
}
}
}
2.匿名內(nèi)部類(lèi)與匿名對(duì)象
class Woker{
private String name;
public Woker(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class MIniWoker extends Woker{
public MIniWoker(String name) {
super(name);
}
}
public class MyClass {
public static void main(String[] args) {
//顯示創(chuàng)建,顯示對(duì)象
//如果需要多次使用這個(gè)對(duì)象用此方法
Woker xw = new Woker("小王");
buildHouse(xw);
xw.setName("小王plus");
//匿名對(duì)象
//這個(gè)對(duì)象只需要使用一次
buildHouse(new Woker("張三"));
//匿名類(lèi):不顯示創(chuàng)建這個(gè)類(lèi)
buildHouse(new Woker("miniWoker"){
//匿名類(lèi)的具體實(shí)現(xiàn)谷暮,匿名內(nèi)部類(lèi)不能申明構(gòu)造方法蒿往,
//使用匿名內(nèi)部類(lèi)必須滿足兩點(diǎn):
//1.這個(gè)類(lèi)要么繼承某個(gè)父類(lèi);
//2.要么實(shí)現(xiàn)某個(gè)接口
public int salary;
public void showMoney(){
System.out.println(getName()+"的工錢(qián)為100"+salary);
}
});
}
public static void buildHouse(Woker a){
System.out.println(a.getName()+"開(kāi)始工作");
}
}