(1) A subclass inherits all variables and (normal) methods from its superclass:
(2) A subclass do not inherit any constructor method from its superclass:
Notice that a subclass object (always) contains a superclass object:
Recall: objects are initialized using its constructor
(3) A constructor in the subclass must invoke some constructor in its superclass as its first statement:
The keyword super( ... ) is used to invoke a constructor in its superclass
public class myProg
{
public static void main()
{
NewClass a = new NewClass();
NewClass b = new NewClass(44);
}
}
|
public class NewClass
extends SomeClass
{
public int x;
public NewClass()
{
super(); //Not:SomeClass()
}
public NewClass(int a)
{
super(a); //Not:SomeClass(a)
}
}
|
public class SomeClass
{
public int x;
public SomeClass()
{
x = 99;
}
public SomeClass(int a)
{
x = a;
}
}
|
DEMO: trace the execution in BlueJ
(4a) If a constructor in the subclass does NOT invoke any constructor in its superclass as its first statement:
Then.... (can you guess what will happen ??? Remember the rules about default constructors ? )
(4b) The Java compiler will automatically insert the call super( ) as the first statement:
public class myProg
{
public static void main()
{
NewClass a = new NewClass();
}
}
|
public class NewClass
extends SomeClass
{
public int x;
public NewClass()
{
// Java adds super()
}
public NewClass(int a)
{
super(a);
}
}
|
public class SomeClass
{
public int x;
public SomeClass()
{
x = 99;
}
public SomeClass(int a)
{
x = a;
}
}
|
DEMO: trace the execution in BlueJ
Explain the compile error in this program:
public class NewClass
extends SomeClass
{
NewClass()
{
// error
}
}
|
public class SomeClass
{
public int x;
public SomeClass(int a)
{
x = a;
}
}
|
Because the constructor NewClass() does not contain any super(...) calls, Java compiler will insert super( ):
public class NewClass
extends SomeClass
{
NewClass()
{
super( )
}
}
|
public class SomeClass
{
public int x;
public SomeClass(int a)
{
x = a;
}
}
|
However: there is no matching constructor ( SomeClass( )) defined in the superclass SomeClass !!! ---> Error
|
|
public class SomeClass
{
public int x;
public SomeClass()
{
x = 99;
}
public void method1( )
{
System.out.println("I am SomeClass.method1(). x = " + x);
}
public void method2( )
{
System.out.println("I am SomeClass.method2(). x = " + x);
}
}
|
|