Java 中的多态性是对象采取多种形式的能力。简单地说,java 中的多态性允许我们以多种不同的方式执行相同的操作。所以在我们进入多态之前,让我们先看看java中的抽象类。
某些课程不应启动。
在设计类继承结构时,必须决定哪些类是抽象的,哪些是具体的。具体类是那些足够具体以启动的类。一个具体的类只是意味着可以创建该类型的对象。
到m一磕一类的抽象类,你需要把抽象的关键字类声明之前。
抽象类犬扩展动物 { public void roam() { } }
Compiler 不会让您实例化抽象类。
抽象类意味着您不能创建该类的新实例。出于多态的目的,您仍然可以将该抽象类用作声明的引用类型,但您不必担心有人会创建该类型的对象。
一个例子来自 Head First Java — Kathy Sierra
所以如果我们编译这个类使用,
javac MakeCanine.java
这将导致一个错误,其中提到了Canine 是抽象的,无法实例化。
抽象类在生命中几乎没有任何用途、价值和目的,除非它被扩展。
java中抽象类和具体类有很大的区别。让我们快速浏览一下。
抽象类AbstractClass { 抽象无效displayMessage(); } public class JavaApplication { public static void main(String[] args) { AbstractClass AC = new AbstractClass() { void displayMessage() { System. out .println( "在抽象类中调用displayMessage" ); } }; AC.displayMessage(); 系统。out .println( "这是消息" ); } }
在这里,抽象类由一个具体的子类启动,这允许调用该类中的方法。
所以下面总结了抽象类和具体类的区别。
图片来自https://www.geeksforgeeks.org/
抽象类意味着必须扩展该类,抽象方法意味着必须覆盖该方法。您可能认为抽象类中的某些行为没有任何意义,除非它们在抽象类中实现,否则没有任何意义,除非它们由更具体的子类实现。
抽象方法没有人!
在抽象方法中,不能有方法体,您需要覆盖该方法才能拥有方法体。
公共抽象无效计算();
您不能在非抽象类中使用抽象方法,因为您也需要将该类声明为抽象类。
java中有两种类型的多态性,即编译时多态性和运行时多态性。我们可以通过重载和覆盖方法在 java 中执行多态。因此,任何通过一个以上 IS-A 测试的 Java 对象都将是多态的,并且所有 Java 对象都是多态的,因为它们已经通过了它们自己的类型以及类 Object 的 IS-A 测试。
java中有两种多态,即运行时多态和编译时多态。我们可以通过方法重载和方法覆盖在java中实现多态。
那么让我们先来看看编译时多态性。
编译时多态
这也称为静态多态性。这可以通过java重载来实现。下面是一个编译时多态的简单例子。
类计算器 { int乘法(int a,int b) { return a*b; } int 乘法( int a, int b, int c) { return a*b*c; } } public class DemoApp { public static void main(String args[]) { Calculator obj = new Calculator(); 系统。out .println(obj.multiply(10, 20)); 系统。出去.println(obj.multiply(10, 20, 30)); } }
所以这里有两个相同方法的定义 multiply() 调用哪个乘法方法是由编译时的参数列表决定的。
运行时多态性
这也称为动态多态性,因为这是一个在运行时解析对重写方法的调用的过程。所以让我们在这里有一个运行时多态的真实例子。
Employee 类是父类,Manager 类是子类。子类覆盖父类的方法calculateSalary()。在这个例子中,我们将一个子类对象分配给父类引用,因此,为了确定将调用哪个方法,将在运行时确定对象的类型。
class Employee{ public void calculateSalary(){ System. out .println( "工资计算-重写方法" ); } }公共类经理扩展员工{ public void calculateSalary(){ System. out .println( "工资计算-重写方法" ); } public static void main(String args[]){ Employee obj = new Manager(); obj.calculateSalary(); } }
当通过父类的引用调用被覆盖的方法时,对象的类型决定了在运行时 JVM 中要执行的方法。所以决定是在运行时做出的,这就是调用运行时多态性的原因。
所以这就是java中的多态性。希望您了解什么是多态以及何时使用多态。我们下个教程见。谢谢 !