What is polymorphism?
Polymorphism refers to which class instance object a reference variable will point to. The method call issued by the reference variable is a method implemented in which class. This must be determined during the running of the program. .
Because the specific class is determined when the program is running, the reference variable can be bound to various class implementations without modifying the source program code, resulting in the specific method called by the reference changing. This change means that the specific code bound to the program when it is running can be changed without modifying the program code, allowing the program to select multiple running states. This is polymorphism.
(Free online learning video tutorial sharing:java online learning)
Features:
points to the parent class of the subclass Since the reference is upwardly transformed, it can only access methods and properties owned by the parent class. For methods that exist in the subclass but not in the parent class, the reference cannot be used, even if the method is overloaded.
If the subclass overrides some methods in the parent class, when calling these methods, the methods defined in the subclass must be used (dynamic connection, dynamic calling).
There are three necessary conditions for Java to achieve polymorphism: inheritance, rewriting, and upward transformation.
The priority method called, the priority is: this.show(O), super.show(O), this.show((super)O), super.show((super )O).
The implementation principle of polymorphism
The invocation of object methods in Java is implemented by relying on the method table in the class information.
In general, when a method of an object is called, the JVM looks up the method table of the object class to determine the direct reference address of the method, and only then actually calls the method after having the address.
The super class inherits the method of the parent class. If the method is not Overriding, the call will point to the method of the parent class. If Overrding this method, it points to the code area of the class, but the super class will have the method table of the parent class.
We know that when a Java program is running, class-related information is placed in the method area. Among this information is an area called a method table. This table contains information about all methods defined by the type and points to these Pointer to the actual code of the method.
As shown in the figure:
When the four classes Bird, Cock, Parrot and CrazyParrot are loaded into the method area of the Java virtual machine, The method area contains information about these four classes. The following figure shows an example of the method table of each class.
From the figure we can see that the class information method tables of Cock, Parrot and CrazyParrot contain methods inherited from Bird. CrazyParrot's method table contains methods inherited from Parrot. In addition, each class also has its own methods.
Pay attention to the specific method code area pointed to by the method table entry. For the polymorphic Overriding method courtship(), although the location of the courtship() entry in the method tables of Cock, Parrot and CrazyParrot belongs to the part inherited from the Bird method table, it points to a different method code area.
Related article tutorial sharing:Java language introduction
The above is the detailed content of What is the principle of polymorphism in java. For more information, please follow other related articles on the PHP Chinese website!