2013年8月24日、繼承|final關鍵字|



/*
子父類中的構造函數的特點。


在子類構造對象時,發現,訪問子類構造函數時,父類也運行了。
爲什麼呢?
原因是:在子類的構造函數中第一行有一個默認的隱式語句。 super();


子類的實例化過程:子類中所有的構造函數默認都會訪問父類中的空參數的構造函數。


爲什麼子類實例化的時候要訪問父類中的構造函數呢?
那是因爲子類繼承了父類,獲取到了父類中內容(屬性),所以在使用父類內容之前,
要先看父類是如何對自己的內容進行初始化的。


所以子類在構造對象時,必須訪問父類中的構造函數。 
爲什麼完成這個必須的動作,就在子類的構造函數中加入了super()語句。


如果父類中沒有定義空參數構造函數,那麼子類的構造函數必須用super明確要調用
父類中哪個構造函數。同時子類構造函數中如果使用this調用了本類構造函數時,
那麼super就沒有了,因爲super和this都只能定義第一行。所以只能有一個。
但是可以保證的是,子類中肯定會有其他的構造函數訪問父類的構造函數。




注意:supre語句必須要定義在子類構造函數的第一行。因爲父類的初始化動作要先完成。










*/


class Fu
{
int num ;
Fu()
{
num =10;
System.out.println("A fu run");
}
Fu(int x)
{
System.out.println("B fu run..."+x);
}
}
class Zi extends Fu
{
int num;
Zi()
{
//super();//調用的就是父類中的空參數的構造函數。

System.out.println("C zi run"+num);
}
Zi(int x)
{
this();
//super();
// super(x);
System.out.println("D zi run "+x);
}
}


class  ExtendsDemo1
{
public static void main(String[] args) 
{
new Zi(6);
}
}
class Demo//extends Object
{
/*

Demo()
{
super();
return;
}
*/

}

--------------------------------------------------------------------------------------------

class Fu
{
Fu()
{
super();
show();
return;
}


void show()
{
System.out.println("fu show");
}
}
class Zi extends Fu
{
int num = 8;
Zi()
{
super();
//-->通過super初始化父類內容時,子類的成員變量並未顯示初始化。等super()父類初始化完畢後,
//才進行子類的成員變量顯示初始化。


System.out.println("zi cons run...."+num);
return;
}
void show()
{
System.out.println("zi show..."+num);
}
}
class ExtendsDemo2
{
public static void main(String[] args) 
{
Zi z = new Zi();
z.show();
}
}


/*
一個對象實例化過程:
Person p = new Person();
1,JVM會讀取指定的路徑下的Person.class文件,並加載進內存,
並會先加載Person的父類(如果有直接的父類的情況下).
2,在堆內存中的開闢空間,分配地址。
3,並在對象空間中,對對象中的屬性進行默認初始化。
4,調用對應的構造函數進行初始化。
5,在構造函數中,第一行會先到調用父類中構造函數進行初始化。
6,父類初始化完畢後,在對子類的屬性進行顯示初始化。
7,在進行子類構造函數的特定初始化。
8,初始化完畢後,將地址值賦值給引用變量.








*/

————————————————————————————————————————

final關鍵字:-------------------------------面試題、

//繼承弊端:打破了封裝性。
/*
final關鍵字:
1,final是一個修飾符,可以修飾類,方法,變量。!!!
2,final修飾的類不可以被繼承。!!!
3,final修飾的方法不可以被覆蓋。!!!
4,final修飾的變量是一個常量,只能賦值一次。!!!
爲什麼要用final修飾變量。其實在程序如果一個數據是固定的,
那麼直接使用這個數據就可以了,但是這樣閱讀性差,所以它該數據起個名稱。
而且這個變量名稱的值不能變化,所以加上final固定。


寫法規範:常量所有字母都大寫,多個單詞,中間用_連接。






*/
class Fu
{
void method()
{
//調用了底層系統的資源。
}
}
class Zi extends Fu
{
public static final double MY_PI = 3.14;
static final int x = 7;


void method()
{
// final int x = 9;
// x = 9;
final int NUMBER = 9;

System.out.println(MY_PI);
}
}


class FinalDemo 
{
public static void main(String[] args) 
{
System.out.println("Hello World!");
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章