? hands-on experiment One: Construction method invocation under inherited conditions
Run Testinherits.java Example
Package demo;
class Grandparent {
Public Grandparent () {
System. out. println ("grandparent Created.");
}
Public Grandparent (String string) {
System. out. println ("Grandparent created.string:" + String);
}
}
class Parent extends grandparent {
Public Parent () {
Super ("hello.grandparent.");
System. out. println ("Parent Created");
Super ("hello.grandparent.");
}
}
class Child extends Parent {
Public Child () {
System. out. println ("Child Created");
}
}
Public class Number {
Public Static void Main (String args[]) {
Child C = new child ();
}
}
observe the output, and note the invocation relationship between the parent class and the child class, modifying Parent constructs the code of the method, explicitly calls the Grandparent Another constructor, notice whether the calling code is the first sentence, the impact is significant!
Operation Result:
First time: Grandparent Created.
Parent Created
Child Created
Second time: Grandparent Created.String:Hello.Grandparent.
Parent Created
Child Created
If the parent class has no constructor (in fact, a default parameterless constructor), the constructor of the subclass is called automatically, and if the parent class has its own constructor (the parent class does not have a default parameterless constructor), then in the subclass constructor, you must call a constructor of the parent class. and must be called in the first statement of the construction method.
? hands-on experiment two: Thinking
Why do I have to call the construction method of the parent class before the constructor of the subclass is run? Can you turn around? Why can't it be reversed?
Constructs an object that first calls its constructor method to initialize its member functions and member variables. A subclass has member variables and member methods of the parent, and if not called, the member variables and member methods inherited from the parent class are not properly initialized. This can not be called in turn, because the parent class does not know what variables the subclass has and thus the subclass cannot get the initialized parent class variable, causing the program to run an error!
? hands-on experiment three: Write your own code to test the following features:
In a subclass, to invoke the overridden method in the parent class, you can use the Super key word.
The same as a hands-on brain:
Package demo;
class Grandparent {
Public Grandparent () {
System. out. println ("grandparent Created.");
}
Public Grandparent (String string) {
System. out. println ("Grandparent created.string:" + String);
}
}
class Parent extends grandparent {
Public Parent () {
Super ("hello.grandparent.");
System. out. println ("Parent Created");
}
}
Public class Number {
Public Static void Main (String args[]) {
Parent P=new parent ();
}
}
The inheritance and interface of the hands-on brain