我一直在爲OCA Java SE 8認證做準備,並且我一直在做很多的學習,最難的部分之一對我來說,一直是繼承,主要是因爲我開始使用PHP進行編程,所以我的編程並沒有如此面向對象。不管怎樣,我的問題是:Java繼承 - 在派生對象中使用基本變量時,派生類重寫基類方法
class MyOffice{
public static void main(String args[]){
Employee emp = new HRExecutive();
int x = emp.getInt();
System.out.println(x);
}
}
class Employee {
public String name;
String address;
protected String phoneNumber;
public float experience;
int y = 12;
/* COMMENTED CODE THAT GETS OVERRIDDEN WHEN UNCOMMENTED
public int getInt(){
System.out.println("Employee getInt");
return y;
}
*/
}
interface Interviewer{
public void conductInterview();
}
class HRExecutive extends Employee implements Interviewer{
public String[] specialization;
int elInt = 10;
public void conductInterview(){
System.out.println("HRExecutive - conducting interview");
}
public int getInt(){
System.out.println("HRExecutive getInt");
return elInt;
}
}
使用員工變量來創建一個HRExecutive對象,它不會讓我達成任何HRExecutive成員,試圖編譯將會失敗是由於沒有找到符號,這使得感。
但是,當我刪除註釋,並在基類Employee中聲明getInt()時,它會被HRExecutive的方法覆蓋。它打印「HRExecutive getInt」和「10」。
如果以前的員工沒有訪問HRExecutive的成員,爲什麼在類中聲明相同的方法後會被覆蓋?這是我想了解的。
這就是多態性的要點。你可以在基類中聲明一個方法;當代碼調用該方法時,程序實際上可以運行該方法的不同實現,具體取決於對象是否實際上是該基類或其某個子類的對象。你真的應該通過一個教程來了解基本概念。 Oracle有一個[這裏](https://docs.oracle.com/javase/tutorial/java/concepts/),雖然有可能更好。 – ajb