Comment on page
9.5 Exercises
Recall that the
maxDog
method has the following signature: public static Dog maxDog(Dog d1, Dog d2) { … }
- 1.What is the static type of
Dog.maxDog(dogC, dogD)
?
ShowDog dogC = new ShowDog("Franklin", "Malamute", 180, 6);
ShowDog dogD = new ShowDog("Gargamel", "Corgi", 44, 12);
Dog.maxDog(dogC, dogD);
- 2.Which (if any), will compile:
Dog md = Dog.maxDog(dogC, dogD);
ShowDog msd = Dog.maxDog(dogC, dogD);
- 3.In the code below, what are the dynamic types of
o
,d
,stuff[0]
, andstuff[1]
?
Object o = new Dog("Hammy", "Beagle", 15);
Dog d = new ShowDog("Ammo", "Labrador", 54);
Object stuff[] = new Object[5];
stuff[0] = o;
stuff[1] = d;
studd[2] = null;
- 1.Is it possible for an interface to extend a class? Provide an argument as to why or why not.
- 2.What are the differences between
extends
andimplements
inheritance? Is there a particular time when you would want to use one over the other?
The primary difference is that
extends
inherits implementations, allowing a subclass to reuse code from the superclass, while implements
only serves as a "contract" that a class will implement certain methods.Use
extends
when you want a subclass to have the same behavior as a superclass in certain methods. Use implements
when subclasses have different implementations of the same conceptual methods, or when you need to inherit from multiple supertypes.- 1.Say there is a class
Poodle
that inherits fromDog
. The Dog class looks like this:
public class Dog {
int weight;
public Dog(int weight_in_pounds) {
weight = weight_in_pounds;
}
}
And the Poodle class looks like this:
public class Poodle extends Dog {
public Poodle() {}
}
Is this valid? If so, explain why. If it is not valid, then explain how we can make it valid.
- 2.The
Monkey
class is a subclass of theAnimal
class and theDog
class is a subclass of theAnimal
class. However, a Dog is not a Monkey nor is a Monkey a Dog. What will happen for the following code? Assume that the constructors are all formatted properly.
Monkey jimmy = new Monkey("Jimmy");
Dog limmy = (Dog) jimmy;
- 3.How about for this code? Provide brief explanation as to why you believe your answers to be correct.
Monkey orangutan = new Monkey("fruitful");
Dog mangotan = ((Dog) ((Animal) orangutan));
This will not compile because the
Poodle
constructor implicitly calls the Dog
constructor (through super
), but the Dog
class has no zero-argument constructor. To make this valid, we could add a zero-argument
Dog
constructor, or make the Poodle
constructor take in an int
argument and call super(weight_in_pounds)
.