Java中的多态性示例| Java多态性教程
Java中的多态性示例| Java多态性教程是今天的主题。多态性这个词来自两个希腊词poly,意思是多,而morph意味着形状或类型。因此,多态性可以定义为可以以不同/多种形式显示的单词。但是在Java的情况下,它是一个运算符或构造函数或方法,可以以多种形式显示。
内容概述
- 1#编程中的多态性是什么
- 2 Java中的多态性
- 3 #Compile time polymorphism
- 4 #Operator重载
- 5 #Constructor重载
- 6 #Method重载
- 7 #Run time polymorphism
- 8 #Upcasting
- 9 #Method overriding
- 10 #Java运行时与数据成员的多态性
- 11具有多级继承的Java运行时多态性
- 12#静态和动态多态之间的差异
#编程中的多态性是什么?
多态性是该方法基于其所作用的对象来执行不同事物的能力。换句话说,多态允许您定义一个接口并具有多个实现。
例如,你有一个手机用于通信,你选择的通信模式可以是电话,短信,图片信息,邮件等。所以,我们的主要目标是通用,即沟通,但他们的方法是不同的。这称为多态性。
Java中的多态性
多态性OOPs概念之一。继承允许我们从另一个类继承属性和方法。多态性使用这些方法执行不同的任务。多态性允许我们以不同的方式执行单一动作。
Java中主要有两种类型的多态:
- 编译时间多态性
- 运行时多态性
#Compile time polymorphism
在编译期间显示多态性的任何操作都称为编译时多态性。它也被称为静态多态性。运算符重载,构造函数重载和方法重载是编译时多态的示例。
#Operator重载
Java为重载操作符提供了可访问性。例如,我们可以使用'+'运算符来添加两个数字以及连接两个字符串。 '+'是java中用于运算符重载的唯一运算符。
#Constructor重载
当一个类有多个具有不同参数的构造函数时,它被称为构造函数重载。这表明多态性。请参阅以下程序。
class child { child() { System.out.println("Hi !"); } child(String name) { System.out.println("Name is " + name); } child(String name, int std) { System.out.println("My name is " + name + "and I'm in class" + std); } public static void main(String args()) { child ch = new child(); child ch1 = new child("Shouvik"); child ch2 = new child("Shouvik ", 10); } }
请参阅以下输出。
#Method重载
方法重载意味着一个类具有多个具有相同名称但参数不同的方法。这种方法重载属于编译时多态。
请参阅以下程序。
class overload { void show(String name) { System.out.println(name); } void show(String name, int std) { System.out.println(name + " " + std); } } class goal { public static void main(String() args) { overload ob = new overload(); ob.show("shouvik"); ob.show("shouvik", 10); } }
请参阅以下输出。
#Run time polymorphism
在运行时显示多态性的任何操作称为运行时多态。它也被称为动态多态性。方法覆盖是运行时多态性的最佳示例。
#Upcasting
如果Parent类的引用变量引用Child类的对象,则称为upcasting。
请参阅以下语法。
class A{} class B extends A{} A a=new B();
对于upcasting,我们可以使用类类型的引用变量或接口类型。
interface I{} class A{} class B extends A implements I{}
现在,让我们定义关系。
B IS-A A B IS-A I B IS-A Object
#Method overriding
可以将java中的方法重写定义为已存在于超类中的子类或子类中的方法。
请参阅以下程序。
class car { void run() { System.out.println("car is running"); } } class bike extends car { void run() { System.out.println("bike is running"); } public static void main(String args()) { bike ob = new bike(); ob.run(); } }
请参阅以下输出。
#Java运行时与数据成员的多态性
重写方法,而不是数据成员,因此数据成员无法实现运行时多态性。
在下面给出的示例中,两个类都具有数据成员速度。我们通过Parent类的引用变量访问数据成员,该引用变量引用子类对象。由于我们正在访问未被覆盖的数据成员,因此它将始终访问Parent类的数据成员。
请参阅以下代码示例。
class Car { int speed = 80; } class GC extends Car { int speed = 140; public static void main(String args()) { Car c = new GC(); System.out.println(c.speed); } }
请参阅以下输出。
具有多级继承的Java运行时多态性
让我们看一下具有多级继承的Runtime Polymorphism的简单示例。
class Doc { void print() { System.out.println("Printing"); } } class PDF extends Doc { void print() { System.out.println("Printing PDF Docs"); } } class Word extends Doc { void print() { System.out.println("Printing Word Docs"); } public static void main(String args()) { Doc d1, d2, d3; d1 = new Doc(); d2 = new PDF(); d3 = new Word(); d1.print(); d2.print(); d3.print(); } }
请参阅以下输出。
#静态和动态多态之间的差异
静态多态性 | 动态多态性 |
---|---|
它涉及方法重载。 | 它涉及一种覆盖方法。 |
错误(如果有)在编译时解决。由于我们的代码在编译期间没有执行,因此名称为static。 例如: void mul (int x , int y); void mul (float x, double y); int mul (int x, int y); //compiler gives error. |
如果引用变量正在调用重写方法,则要调用的方法由对象确定,您的引用变量指向该对象。它只能在运行时决定代码处于执行状态,因此名称为dynamic。 例如: //reference of parent pointing to child object Engineer eng = new ITE(); // method of child called eng.createProduct(); |
最后,Java中的多态性示例| Java多态性教程结束了。