With the Super keyword, you can:
Look at the following example:
public class Test {
public static void main(String[] args)
{
Square mysquare = new Square();
mysquare.getInformation();
}
}
class Shape // the SUPERCLASS
{
int color = 4;
public void getInformation() // getInformation() in the superclass
{
System.out.println(color);
}
}
class Square extends Shape // the SUBCLASS
{
String sides="4 sides";
public void getInformation() // getInformation() in the subclass
{
getInformation();
}
}
This outputs:
Exception in thread “main” java.lang.StackOverflowError
at Square.getInformation(Test.java:30)
at Square.getInformation(Test.java:30)
at Square.getInformation(Test.java:30)
Why the error?
At line 28, the call to method getInformation() actually has “this” appending to it automatically:
this.getInformation()
“this” refers to the object that called it “mysquare”
So what happens is a cycle that goes round and round and crashes the program.
However, if we use the “super” keyword
super.getInformation() as follows on line 28
public class Test {
public static void main(String[] args)
{
Square mysquare = new Square();
mysquare.getInformation();
}
}
class Shape // the SUPERCLASS
{
int color = 4;
public void getInformation() // getInformation() in the superclass
{
System.out.println(color);
}
}
class Square extends Shape // the SUBCLASS
{
String sides="4 sides";
public void getInformation() // getInformation() in the subclass
{
super.getInformation();
}
}
This outputs:
4
The getInformation() method in the SUPERCLASS is being called (the Shape class)