什么是Java中的多态方法?

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

你对术语有困惑吗(即改述是否有帮助)?还是你对多态的概念有困难? - user395760
1
你先了解多态性吗? - jzd
Java中多态性的Sunoracle教程:http://download.oracle.com/javase/tutorial/java/IandI/polymorphism.html - wkl
6个回答

21

"多态"意味着"多种形状"。在Java中,您可以拥有一个具有不同功能的子类的超类,并使用相同的名称。传统的示例是超类 Shape ,具有子类 Circle Square Rectangle 以及方法 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 及其子类利用多态调用了方法 area。


3
问题要求的是多态方法,而不是什么是多态性。 - Number945

7

Charlie的答案简单地解释了多态是什么。

接下来,这就是一个“多态方法”:

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

在技术上,“多态”是指其签名表示您正在获取一个“形状”,但您实际上获得的是“形状”子类。由于您不知道确切地获得了什么(可能是Circle,Square等),因此必须使用超类接口(即多态)来处理它。
需要注意的是,“多态方法”可能是一个不熟悉的术语(可能是因为我只有一点Java经验),因此它可能被用来表示其他内容。这只是我的解释。

这不是Java中多态方法的含义。请看我的回答 - Number945
你的回答在哪里,@Number945?你的链接没有指向它。你能解释一下Java中的多态方法是什么吗? - Nil Suria

1

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

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

那么...

animal.sleep();

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


0

如果以下所有条件都成立,则该方法是签名多态的:

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

它具有类型为Object[]的单个形式参数。

它具有返回类型Object。

它设置了ACC_VARARGS和ACC_NATIVE标志。

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

JVM规范2.9。特殊方法


0

多态方法或函数是具有通用返回类型的Java中的函数(静态)或方法。

例如:

class SomeCollection<T> {

   public <T> getFirstItem() //left unimplemented for example reasons
}

比如说,我们实例化一个new SomeCollection<MyObject>();,这意味着方法getFirstItem()会在这个实例中返回一个MyObject

这就是多态函数/方法的含义。

它是在方法或函数中定义的类型的泛型和多态的结合。

该函数有许多形式,可以在对象构造时定义。在我的例子中,该函数以MyObject作为返回类型。

这个问题的其他答案是方法/函数参数中多态的例子。

希望对你有所帮助。

谢谢, Rhys


0

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

它不是一个编程概念,但它是其中的一个原则。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接