1、編譯器檢視物件的宣告型別和方法名。當呼叫
x.f(param);
且隱式引數x生命為c類物件。這時候可能有多個名字都叫f,但是引數型別不一樣的方法。編譯器會一一枚舉c類中名為f的方法和其超類中訪問屬性為public並且名為f的方法。(超類的私有方法是不能訪問的)
進行到這裡的時候編譯器已經獲得了可能被呼叫的所有的候選方法。
緊接著,編譯器就會開始檢視呼叫犯非法提供的引數型別。如果在所有名為f的方法中存在乙個與提供的引數型別完全匹配,就選擇這個方法。這個過程被稱為過載解析。
到這個時候編譯器已獲得需要呼叫的方法名字和引數型別。
2、有時候,不希望利用某個類定義子類,不允許擴充套件的類成為final類。
例如,當想阻止定義executive類的子類,就可以定義這個類的時候使用final修飾符。
final classexecutive extends manager
······
}
如果將乙個類宣告為final,只是其中的方法自動成為能夠為final,而不包括域。
3、強制型別轉換
我們都學過將乙個型別強制轉換為另乙個型別:
double x = 3.405;int nx = (int)x;
表示式x的值就會被轉換為整數型別,捨棄了小數部分。
有時候我們也會需要將某個類的物件引用轉換成另外乙個類的物件使用,例如:
manager boss = (manager) staff[0];
在進行型別轉換之前我們可以先檢視一下是否能夠轉換成功,這個過程使用instanceof就可以實現。
if (staff[1] instanceofmanager)
型別轉換的法則:
只能在繼承層次內進行型別轉換。
在將超類轉換成子類之前,應該使用instanceof進行檢查。
阻止繼承 final類和方法
有時候,可能希望阻止人們利用某個類定義子類.不允許擴充套件的類被稱為final類.如果在定義類的時候使用了final修飾符就表面這個類是final類.例如,假設希望阻止人們定義executive類的子類,就可以在定義這個類的時候,使用final修飾符宣告.public final class exe...
c 中動態繫結和繼承
1 動態繫結也叫多型性,要掌握從派生類到基類的轉換,使用指標或引用來實現。引用或指標既可以指向基類物件,也可以指向派生類物件。只有通過引用或指標呼叫虛函式才會發生動態繫結。2 c 中有三種繼承方式 公有。私有和受保護繼承。最常用的是公有繼承,基類是什麼型別,公有繼承後還是什麼型別。公有繼承叫做介面繼...
Final類和Final方法
終止繼承 final類 當關鍵字final用來修飾類時,其含義是該類不能在派生子類。換句話說,任何其他類都不能繼承用final修飾的類,即使該類的訪問限制為public型別,也不能被繼承 否則,將編譯報錯。可以繼承的其他類。什麼時候應該使用final修飾類呢?只有當需要確保類中的所有方法都不被重寫時...