From https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html: "You don't have to provide any constructors for your class, but you must be careful when doing this. The compiler automatically provides a no-argument, default constructor for any class without constructors. This default constructor will call the no-argument constructor of the superclass. In this situation, the compiler will complain if the superclass doesn't have a no-argument constructor so you must verify that it does."
In the following code, class Goblin has no constructor. Neither does its superclass, Humanoid.
public class Humanoid {
int weight;
//public Humanoid() {
//weight = 10;
//}
}
class Goblin extends Humanoid {
char armorColor;
}
class Driver {
public static void main(String[] args) {
Goblin grug = new Goblin();
System.out.println(grug.armorColor);
boolean isGrugAGoblin = false;
isGrugAGoblin = (grug instanceof Goblin);
System.out.println(isGrugAGoblin);
}
}
I compiled and ran the above code successfully, despite the tutorial's claim that the compiler would complain. The output was
true
I expected an error, like the tutorial claimed. Is the tutorial wrong?
Every class in Java inherits, ultimately, from
java.lang.Object. That is why your class has methods such asequalsandtoString.When you instantiate any class, an implicit call is made to its immediate superclass, and the immediate superclass of that, onwards to eventually reach
Object.In your case,
Humanoidextendsjava.lang.Object.Incorrect.
The class
Goblinhas no explicit constructor. It does have an implicit constructor. Think of it as the compiler writing the constructor on your behalf, behind your back.For more info, see this Answer by OrangeDog to the Question, Java default constructor.
Ditto.
Humanoidhas an implicit default constructor.For all the details, see Section 8.8.9. Default Constructor of Java Language Specification.