我在看程式書時碰到了一個程式,懂Java的大大們還請進來一下

class Skill{} class AdvSkill extends Skill{} class Animal{ Skill skill; public Skill getSkill(){ skill=new Skill(); return skill; } } public class Dog extends Animal{ AdvSkill aSkill; public AdvSkill getSkill(){ aSkill=new AdvSkill(); return... 顯示更多 class Skill{}

class AdvSkill extends Skill{}

class Animal{
Skill skill;
public Skill getSkill(){
skill=new Skill();
return skill;
}
}

public class Dog extends Animal{
AdvSkill aSkill;
public AdvSkill getSkill(){
aSkill=new AdvSkill();
return aSkill;
}
}
這段程式書上是說覆寫Overriding回傳型別的範例,可說真的我也只道他在回傳型別,可我不大清楚他們之間是什麼樣的關係和誰是父誰是子的。

這程式之後還有修改:
public Skill getSkill(){
aSkill=new AdvSkill();
return aSkill;
}

Dog類別裡的這個 getSkill 回傳型別從 AdvSkill改成了 Skill ,書上說,「在Tiger之前因為不支援回傳值的覆寫機制,所以把 AdvSkill改成了 Skill」,這樣改了還是一樣編譯成功啊!

所以請問一下:
1‧上面的那一大段程式,它的型別回傳順序是是怎樣的?還有架構(知道的話)?再來是他們之間誰是父誰是子?
2‧被改過的Dog類別裡的getSkill方法的回傳型別從AdvSkill改成了 Skill ,那程式的回傳型別上有什麼樣的不同?還有為什麼兩個編譯都是成功的,為什麼要把AdvSkill改成了 Skill 型別?
更新: 補充一下我忘了問的,就是「SCJP 5.0猛虎出閘」這樣書裡提到的Tiger什麼東西啊!是程式?是人名?還是說是一個專有名詞?

Tiger這個名詞出現在此本書的第三章回傳型別那個部分。
更新 2: 雖然有點和我這個發出來的問題有本質上有點不大相乾。
就是Excetpion、IOExcetpion這類的都是類別嗎?
那Exception這類的類別有提供什麼方法嗎?可以使我們自己不用在打一個程式區段,像下面這段程式,Exception{}裡面沒打東西為什麼編譯會過,你之前說過在它們後的程式區段不能不打,那為什麼這個可以編譯。
更新 3: import java.io.*;
  class Father{
     void amethod() throws Exception{}
}
public class Son extends Father{
  public static void main(String[] args){
    Son s = new Son();
    try{
     s.amethod();
    }
    catch(IOException e){}
}
  void amethod() throws IOException{}
}
更新 4: 還有啊!之前問玩thorws和try catch這個問題後,我看到書後面幾頁的對「覆寫的限制正注意事項」這的時候,我突然覺得我好像對覆寫這東西不大了解,我述說一下我原的想法。

請看一下我有沒有想錯:所謂的覆寫就是在子類別裡有和父類別裡的方法一樣,兩個相同的方法有著相同的名稱、參數列(不論數量、資料型別及擺放順序)、程式區段等等的,且子類別在執行時會執行取代了父類別的方法,也就是執行子類別那和父類別一樣的方法。

以上這段是我的想法,有錯的話請說一下,如果沒說錯的話,我想問一下,即然父類別和子類別都有一樣的方法,那父類別的方法還要幹麻,還是說它可以在什麼地方有所用途啊!
更新 5: 回傳型別這個部分我懂了,謝謝。

但上面的問題還要麻煩你一下。
更新 6: 那個在請問一下this和super的建構子呼叫時,他們兩個可以一起放在同一個方法和建構子嗎?

還有同一個的this和super可以放在同一個方法或建構子嗎
更新 7: 請問一下,在interface別裡的屬性和方法,書上說屬性和方法的存取權限可以不寫,因為在編譯時,javac會自動在前面加上public ,可如果強行改成別的存取修飾字會出現編譯錯誤。

為什麼不能改成其他的存取修飾字呢?
更新 8: 上面的問題當作我沒問了,因為我了了。

不過我有新的問題,就是在寫java的時候第一行不是都會打class加上檔案名嗎,而在class都會加上存取修飾字元,可如果不打上存取修飾字元的話,程式上有預設什麼存取飾字元嗎?

還有我們不打上存取修飾字元,這是叫default嗎?

會這樣問是因為書上寫說class前面只能放public 和default(package/無修飾元)。
2 個解答 2