java內部類 和外嵌類
阿新 • • 發佈:2019-01-24
/*
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內部類。