內部類
在一個類的內部或方法的內部聲明的類,叫做內部類。語法格式:[訪問修飾符] [static] class 類名{}
可以簡單的把內部類理解成一個變量,只不過這個變量的數據類型是class,使用時需要創建對象後再使用。
分類:
成員內部類:直接聲明在類中的內部類(同成員變量)局部內部類:生命在方法中的內部類(同局部變量)
靜態內部類:使用static修飾的內部類(同靜態變量)
匿名內部類:沒有名字的內部類
匿名內部類的語法格式:new 類名/抽象類名/接口名(){ // 重寫方法 }
實例:
/**
* 國家類:演示內部類的使用
* @author 學霸聯盟 - 趙燦
*/
class Country {
// 聲明一個公共的字符串類型的成員變量(屬性)president(總統)
public String president;
// 聲明一個公共的成員內部類City(城市)
// 注意:這裏不是方法,方法在名稱後面要有小括號
public class City {
// 聲明一個公共的String類型的province(市長)
public String province = "張三";
//非靜態內部類中不能使用static聲明成員
public void method(){
System.out.println("非靜態內部類的非靜態方法");
}
}
/*
* 創建一個公共的沒有返回值的方法promote(升職)
* 因爲變量province屬於City類,所以要使用變量province,
* 需要先創建City類的對象,然後用City類的對象才能調用province屬性
*/
public void promote() {
// 創建Family對象f
City city = new City();
// 將對象f的householder屬性值賦值給president屬性
// 執行後president的值也是“張三”
president = city.province;
//聲明一個局部內部類,只能在該方法的內部使用,外部無法使用
class localInnerClass{ }
}
//靜態內部類
public static class Province{
public static void staticMethod(){
System.out.println("靜態內部類的靜態方法");
}
public void method(){
System.out.println("靜態內部類的非靜態方法");
}
}
}
/**
* 測試類:測試內部類的使用
* @author 學霸聯盟 - 趙燦
*/
public class InnerClassDemo{
public static void main(String[] args) {
//直接調用靜態內部類的靜態方法
Country.Province.staticMethod();
//創建靜態內部類的對象
Country.Province cp = new Country.Province();
//只能使用對象調用非靜態方法
cp.method();
//創建非靜態內部類的對象時,必須先創建外部類的對象
Country c = new Country();
//使用外部類的對象去創建內部類的對象
Country.City cc = c.new City();
//調用非靜態內部類的非靜態方法
cc.method();
}
}
運行結果:
靜態內部類的靜態方法
靜態內部類的非靜態方法
非靜態內部類的非靜態方法