2014-06-05 205 views
3

我在網上發現這些問題(滑鐵盧大學考試學習問題https://www.student.cs.uwaterloo.ca/~cs125/S08/Resources/Exams/StudyQuestions/W07ExamReview/inheritance_questions.txt),但他們沒有任何答案張貼,所以我只想知道我是否正確。Java繼承的子類和超類

  1. 假設名爲SportsCar的類是一個名爲Automobile的類的子類。假設汽車類具有名爲速度,製造商和numberOfCylinders的實例變量。 SportsCar類的對象是否會有實例變量,名爲speed,manufacture和numberOfCylinders?

  2. 假設名爲SportsCar的類是一個名爲Automobile的類的子類,並且假設類Automobile具有名爲accele和addGas的公共方法。 SportsCar類的一個對象是否有名爲加速和addGas的方法?如果是這樣,那麼這些方法是否必須在類Sports中執行完全相同的動作?

  1. 正確的,因爲一個子類繼承了所有的超類方法和變量

  2. 級跑車將有方法addGas但它不會執行 的「精確」相同的動作作爲汽車類的方法。

預先感謝您!

+0

問題2有點棘手,你不會有子類中的方法。但是,你仍然可以從超類中調用它們(使它完全相同)。 –

+0

啊,如果繼承它的子類中的方法是否會與超類中的方法具有相同的名稱? – user3529827

+0

是的,同名。而功能取決於你是否覆蓋 –

回答

4
  1. 一般無

    ,因爲它沒有指定評估修飾,這樣意味着,如果速度是私人那麼SportCar不會有性能

  2. 對象SportCar將有addGas,並會做同樣的事情,汽車類,除非公共方法addGas的實例無法在SportCar

+0

類型條件語句。子類不能繼承私有變量和方法嗎? – user3529827

+0

是多選題嗎? 你可以看到我並沒有提供很多答案 – Vilen

+0

我張貼着我從有問題的URL我的問題。我猜的問題,只是沒有完全措辭 – user3529827

0

1)正確的,除非實例變量是私有的重寫

2)SportsCar可以重寫該方法,所以它不會做的完全一樣。 SportsCar甚至可以根據參數的數量和類型來重載addGas以執行不同的操作。

0

1. 這取決於實施。如果訪問修飾符是私有的,子類(SportsCar)將不具有對其的訪問權限,但這並不意味着它們不存在。例如,SportsCar可以通過如下的構造函數來改變這些值。

public class Automobile { 
    private int speed; 
    private int manufacture; 
    private int numberOfCylinders; 

    public Automobile(int speed, int manufacture, int numberOfCylinders) { 
     this.speed = speed; 
     this.manufacture = manufacture; 
     this.numberOfCylinders = numberOfCylinders; 
    } 
} 

儘管Sportscar不直接訪問它們,但它仍然可以根據汽車的實施情況修改值。

public class SportsCar extends Automobile { 

    public SportsCar() { 
     super(5, 10, 20); 
    } 

} 

2. 是的,它可以覆蓋它們。但是這又取決於汽車中這些方法的訪問修飾符。

public class Automobile { 
    public void addGas(){ 
     //adding gas 
    } 
} 

public class SportsCar extends Automobile { 
    @Override 
    public void addGas() { 
     // Do Something else 
    } 
}