Overloading and rewriting example code of java functions
In Java, polymorphism is divided into two types: compile-time polymorphism (overloading) and run-time polymorphism (rewriting). Compile-time polymorphism is also called front binding, and run-time polymorphism is also called post-binding.
The following is an example:
public class OverloadAndOverwrite { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.print("a1.print(a1): "); a1.print(a1);//输出A and A System.out.print("a1.print(b): "); a1.print(b);//输出A and A:原因是因为A中不存在参数为B的方法,因此会调用参数为A的方法,因为B是继承自A的 System.out.print("a1.print(c): "); a1.print(c);//输出A and A:原因是因为A中不存在参数为C的方法,因此会调用参数为A的方法,因为C是继承自B的,B是继承自A的 System.out.print("a1.print(d): "); a1.print(d);//输出A and D:原因是因为A中存在参数为D的方法,因此会调用参数为D的方法 System.out.print("a2.print(b): "); a2.print(b);//输出B and A:原因在于首先入口是A,首先查看A中是否有参数为B的print方法,发现没有那就寻找有没有参数为A的方法,因为B是继承自A的,发现存在这样的方法,那么再次查看B中有没有重写这个方法,发现有重新,直接调用B中这个重写的方法 System.out.print("a2.print(c): "); a2.print(c);//输出B and A:原因在于首先入口是A,首先查看A中是否有参数为C的print方法,发现没有那就寻找有没有参数为B的方法,因为C是继承自B的,发现也不存在这样的方法,那就寻找存在参数为A的print方法,因为B继承自A,发现存在这样的方法,那么再次查看B中有没有重写这个方法,发现有重新,直接调用B中这个重写的方法 System.out.print("a2.print(d): "); a2.print(d);//输出 A and D:原因在于入口是A,查看A中存在参数为D的方法,再次查看B中没有重写这个方法,因此输出A中这个方法的结果即可; System.out.print("a2.print(a2): "); a2.print(a2);//输出B and A;原因在于a2的类型是A,因此会调用A里面参数为A的print方法,但是a2右边new的是B,所以因为B中有参数为A的方法,因此采用的是B里面的这个方法 System.out.print("b.print(b): "); b.print(b);//输出B and B;原因:入口是B,因此查看B中存不存在参数为B的print函数,存在则直接输出; System.out.print("b.print(c): "); b.print(c);//输出B and B;原因:入口是B,因此查看B中存不存在参数为C的print函数,发现不存在,则查看存不存在参数为B的print函数,发现存在,并且C中并没有重写该方法,则直接输出;有一点需要注意的是还需要查看一下A中是否存在参数为C的print方法,因为B继承自A,有的话会及成果来这个方法,这样的话输出的结果将变为A and C System.out.print("b.print(d): "); b.print(d);//输出A and D;原因:入口是B,虽然B中不存在参数为D的print函数,但是B继承自A,A中是存在参数为D的print函数的,因此输出的是A中参数为D的结果; } } class A { public void print(A a) { System.out.println("A and A"); } public void print(D d) { System.out.println("A and D"); } // public void print(C c) // { // System.out.println("A and C"); // } } class B extends A { public void print(B b) { System.out.println("B and B"); } public void print(A a) { System.out.println("B and A"); } } class C extends B{} class D extends C{}
What needs to be explained here is:
For A a2 = new B();
If printed separately If a2 is output, the printed result is B@ (hash code), not A@ (hash code), but this does not mean that the type of a2 is B type, because when we call a2.print(a2) in the above program ; when the output result is B and A instead of A and A (if you assume that a2 is of type B, you should call the print method with parameter B in class A, because there is no such method, then the second best option is to call The method with parameter A should output A and A, because B is a subclass of A).
The above is an example code analysis of rewriting and overloading. I hope it will be helpful to students learning Java.
For more articles related to Java function overloading and rewriting example codes, please pay attention to the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

Start Spring using IntelliJIDEAUltimate version...

Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

How does the Redis caching solution realize the requirements of product ranking list? During the development process, we often need to deal with the requirements of rankings, such as displaying a...

Detailed explanation of the design of SKU and SPU tables on e-commerce platforms This article will discuss the database design issues of SKU and SPU in e-commerce platforms, especially how to deal with user-defined sales...
