Quiz 6: Inheritance 2
1. It is usually considered a bad design to make KansasCity a subclass of City because:
- It violates the rule of polymorphism
- The classification for use of inheritance is premature as
KansasCityis an instance ofCity - It violates the Law of Demeter
- It violates the rule of change
Correct answer: The classification for use of inheritance is premature as
KansasCityis an instance ofCity
Explanation:
Inheritance shouldn't be used when a simple instance would suffice.
2. Defining CarOwner as a subclass of Car violates the:
- change rule of inheritance
- rule of reuse
- polymorphism rule of inheritance
- rule of modularity
Correct answer: polymorphism rule of inheritance
Explanation:
A car owner is not themselves a car.
3. Given the following code in Java, which statement about methods getAnimalForAdoption and putAnimal in class CatShelter is correct?
//Cat extends Animal
class AnimalShelter {
Animal getAnimalForAdoption() {}
void putAnimal(Animal animal) {}
}
class CatShelter extends AnimalShelter {
Cat getAnimalForAdoption() {}
void putAnimal(Object animal) {}
}
- Neither of them is an overriding method
- Both are overriding methods
- Neither of them is an overloading method
getAnimalForAdoption()is an overriding method whileputAnimal()is an overloading method
Correct answer:
getAnimalForAdoption()is an overriding method whileputAnimal()is an overloading method
Explanation:
With
getAnimalForAdoption(),CatShelterpromises to return a more specific type ofAnimal. This follows a covariance relationship.With
putAnimal(),CatShelteragrees to allow a more general argument that may or may not be anAnimal. This follows a contravariance relationship.Note: some languages (including Java/C++) do not allow or put heavy restrictions on use of contravariance.1
4. Subcontracting refers to:
- inheritance with overriding and dynamic binding, where the overriding rule is followed
- instance variables of a class are the subcontractors of the class
- the module view of inheritance
- a class delegates its task to its clients
Correct answer: inheritance with overriding and dynamic binding, where the overriding rule is followed.
Explanation:
Subcontracting is a form of design by contract that makes certain guarantees about the pre/postcondition behavior of class descendants.
Recall the Subcontracting Rule of Inheritance listed in section 5.3.