The constructors of the subclass can initialize only the instance variables of the subclass. Thus, when a subclass object is instantiated the subclass object must also automatically execute one of the constructors of the superclass. Show
I think I'm missing something, or something isn't clicking for me. I'm reading a book on java, and I just learned about super(). When used to get a constructor, it gets the constructor from one superclass up, correct? What if you wanted to go two superclasses up, how would that be done? Something's just not sitting right in my brain, and I'm hoping this question will help me put the pieces together. The super keyword in Java is a reference variable which is used to refer immediate parent class object. Whenever you create the instance of subclass, an instance of parent class is created implicitly which is referred by super reference variable. Usage of Java super Keyword
1) super is used to refer immediate parent class instance variable.We can use super keyword to access the data member or field of parent class. It is used if parent class and child class have same fields. Test it NowOutput: In the above example, Animal and Dog both classes have a common property color. If we print color property, it will print the color of current class by default. To access the parent property, we need to use super keyword. 2) super can be used to invoke parent class methodThe super keyword can also be used to invoke parent class method. It should be used if subclass contains the same method as parent class. In other words, it is used if method is overridden. Test it NowOutput: In the above example Animal and Dog both classes have eat() method if we call eat() method from Dog class, it will call the eat() method of Dog class by default because priority is given to local. To call the parent class method, we need to use super keyword. 3) super is used to invoke parent class constructor.The super keyword can also be used to invoke the parent class constructor. Let's see a simple example: Test it NowOutput: animal is created dog is created Note: super() is added in each class constructor automatically by compiler if there is no super() or this().As we know well that default constructor is provided by compiler automatically if there is no constructor. But, it also adds super() as the first statement. Another example of super keyword where super() is provided by the compiler implicitly. Test it NowOutput: animal is created dog is created super example: real useLet's see the real use of super keyword. Here, Emp class inherits Person class so all the properties of Person will be inherited to Emp by default. To initialize all the property, we are using parent class constructor from child class. In such way, we are reusing the parent class constructor. Sometimes you want the subclass to do more than what a superclass’ method is doing. You want to still execute the superclass method, but you also want to override the method to do something else. But, since you have overridden the parent method how can you still call it? You can use We’ve used super() before to call the superclass’ constructor. There are two uses of the keyword super:
The keyword super is very useful in allowing us to first execute the superclass method and then add on to it in the subclass. Coding Exercise In the example below, the Student class overrides the getFood() method of the Person() class, and it uses super.getFood() to call the Person getFood() method before adding on to it. Here, a Person is associated with the food “Hamburger” and a Student is associated with “Hamburger” and “Taco”. Add another subclass called Vegan that inherits from the Student class. Add a Vegan contructor that takes a name as an argument and passes it to the super constructor. Override the getFood() method in Vegan to call the superclass getFood() but add a “No ” in front of it and then say “but ” and add a vegan food. Change Javier to a Vegan object in main() and try it out! How does this work? Remember that an object always keeps a reference to the class that created it and always looks for a method during execution starting in the class that created it. If it finds the method in the class that created it, it will execute that method. If it doesn’t find it in the class that created it, it will look at the parent of that class. It will keep looking up the ancestor chain until it finds the method, all the way up to the Object class. The method has to be there, or else the code would not have compiled. When the student // overridden toString() in subclass public String toString() { return super.toString() + "\n" + subclassInstanceVariables; }2. Check your understanding 9-4-2: Given the following class declarations, and assuming that the following declaration appears in a client program: // overridden toString() in subclass public String toString() { return super.toString() + "\n" + subclassInstanceVariables; }3, what is the result of the call // overridden toString() in subclass public String toString() { return super.toString() + "\n" + subclassInstanceVariables; }4? public class Base { public void methodOne() { System.out.print("A"); methodTwo(); } public void methodTwo() { System.out.print("B"); } } public class Derived extends Base { public void methodOne() { super.methodOne(); System.out.print("C"); } public void methodTwo() { super.methodTwo(); System.out.print("D"); } } You can step through this example using the Java Visualizer by clicking on the following link: . The toString() method is a common method that is overridden. A subclass can override the superclass toString() method and call the super.toString() before adding on its own instance variables. // overridden toString() in subclass public String toString() { return super.toString() + "\n" + subclassInstanceVariables; } 9.4.1. Programming Challenge : Customer InfoThe Customer class below keeps track of the names and addresses of customers. It has a toString() method that prints out the name and address of the object.
Complete the OnlineCustomer class below to inherit from Customer and add an email address, a constructor, and override the toString() method. 9.4.2. Summary
|