【问题标题】:What is polymorphic method in java?java中的多态方法是什么?
【发布时间】:2026-02-05 07:10:02
【问题描述】:

请在 Java 的上下文中解释什么是“多态方法”。

【问题讨论】:

标签: java polymorphism terminology


【解决方案1】:

“多态”的意思是“许多形状”。在 Java 中,您可以拥有一个超类,其子类使用相同的名称来做不同的事情。传统的例子是超类Shape,子类CircleSquareRectangle,以及方法area()

所以,例如

// note code is abbreviated, this is just for explanation
class Shape {
    public int area();  // no implementation, this is abstract
}

class Circle {
    private int radius;
    public Circle(int r){ radius = r ; }
    public int area(){ return Math.PI*radius*radius ; }
}

class Square {
    private int wid;
    Public Square(int w){ wid=w; }
    public int area() { return wid*wid; }
}

现在考虑一个例子

Shape s[] = new Shape[2];

s[0] = new Circle(10);
s[1] = new Square(10);

System.out.println("Area of s[0] "+s[0].area());
System.out.println("Area of s[1] "+s[1].area());

s[0].area() 调用Circle.area()s[1].area() 调用Square.area()——因此我们说Shape 及其子类利用了对方法区域的多态调用。

【讨论】:

  • 问题要求的是多态方法,而不是什么是多态。
【解决方案2】:

查理的回答用简单的术语解释了多态性是什么。

从那里继续,这将是一个“多态方法”:

public void Shape CreateShape() {
    return new Circle(10);
}

从某种意义上说,它是“多态的”,它的签名表明您将获得Shape,但您真正获得的是Shape 的子类。由于您并不确切知道自己得到了什么(可能是CircleSquare 等),因此您必须使用超类的接口(即多态性)来处理它。

我应该提到(可能是因为我对 Java 的经验很少)“多态方法”是一个不熟悉的术语,因此它可能被用来表示其他东西。这只是我的解释。

【讨论】:

  • 这不是 Java 中的多态方法。看看我的ans
  • 你的答案在哪里@Number945?你的链接没有指向它。你能解释一下 Java 中的形态化方法是什么吗?
【解决方案3】:

多态是一个表示“一种形式在多种形式中”的过程。

这不是一个编程概念,但它是原理之一。

Example 1 :

class A
{
 void print(double d)
 {
  System.out.println("Inside Double");
 }
 void print(float f)
 {
  System.out.println("Inside Float");
 }
}
class B
{
 public static void main(String [ ] args)
 {
  A obj1 = new A();
  obj1.print(10.0);
 }
}


Output :

//save as : B.java
//compile as :javac B.java
//run as : java B

Inside Double

______________________


Example 2 :

class A
{
 void print(double d)
 {
  System.out.println("Inside Double");
 }
 void print(float f)
 {
  System.out.println("Inside Float");
 }
}
class B
{
 public static void main(String [ ] args)
 {
  A obj1 = new A();
  obj1.print(10.0f);
 }
}


Output :

//save as : B.java
//compile as :javac B.java
//run as : java B

Inside Float

_______________________

Example 3 :

class A
{
 void print(double d)
 {
  System.out.println("Inside Double");
 }
 void print(float f)
 {
  System.out.println("Inside Float");
 }
}
class B
{
 public static void main(String [ ] args)
 {
  A obj1 = new A();
  obj1.print(10);
 }
}


Output :

//save as : B.java
//compile as :javac B.java
//run as : java B

Inside Float

了解更多 - http://algovalley.com/java/polymorphism.php

【讨论】:

    【解决方案4】:

    如果满足以下所有条件,则方法是签名多态的:

    在 java.lang.invoke.MethodHandle 类中声明。

    它有一个 Object[] 类型的形式参数。

    它的返回类型为 Object。

    它设置了 ACC_VARARGS 和 ACC_NATIVE 标志。

    在 Java SE 8 中,唯一的签名多态方法是 java.lang.invoke.MethodHandle 类的 invoke 和 invokeExact 方法。

    JVM specification 2.9. Special Methods

    【讨论】:

      【解决方案5】:

      多态方法是一种可以采用多种形式的方法。我的意思是,该方法可能在不同的时间调用不同的方法。

      假设你有一个class Animal 和一个class Dog extends Animal 和一个class Cat extends Animal,它们都覆盖方法sleep()

      那么..

      animal.sleep();
      

      ..可以根据变量animal中存储的动态类型调用不同的方法

      【讨论】:

        最近更新 更多