簡體   English   中英

Java繼承子類和超類

[英]Java Inheritance subclass and superclass

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

  1. 假設名為SportsCar的類是名為Automobile的類的子類。 假設汽車類具有名為speed,manufacturer和numberOfCylinders的實例變量。 SportsCar類的對象是否有名為speed,manufacture和numberOfCylinders的實例變量?

  2. 假設名為SportsCar的類是名為Automobile的類的子類,並假設類Automobile具有名為accele和addGas的公共方法。 SportsCar類的對象是否有名為accele和addGas的方法? 如果是這樣,這些方法是否必須在類SportsCar中執行與在Automobile類中完全相同的操作?

  1. 是的,因為子類繼承了所有超類方法和變量

  2. class SportsCar會有方法addGas,但它不會執行與'Automobile類中的方法'完全相同的'動作。

先感謝您!

  1. 通常不會因為它沒有指定評估修飾符,所以這意味着如果速度是私有的,那么SportCar將不具有該屬性

  2. SportCar的對象將具有addGas並將執行與Automobile類的實例相同的操作,除非在SportCar中未覆蓋公共方法addGas

1)除非實例變量是私有的,否則更正

2)跑車可以覆蓋的方法,所以它不會需要做的一模一樣。 SportsCar甚至可以根據方法的參數數量和類型重載addGas以執行不同的操作。

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);
    }

}

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM