什么是java中的多态方法?

时间:2011-01-05 15:17:23

标签: java polymorphism terminology

我正在学习SCJP测试的java语言。

理解“多态方法”有点难。

你能为我解释一下吗? 或者给我一些链接?

5 个答案:

答案 0 :(得分:19)

“多态”意味着“许多形状”。在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及其子类利用对方法区域的多态调用。< / p>

答案 1 :(得分:6)

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

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

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

它的“多态”意味着它的签名表示你得到的是Shape,但你真正获得的是Shape的子类。既然你不确切知道你得到了什么(可能是CircleSquare等等,你必须使用超类的接口(即多态)来处理它。 / p>

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

答案 2 :(得分: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

答案 3 :(得分:0)

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

它在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

答案 4 :(得分:0)

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

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

然后..

animal.sleep();

..可以根据变量animal

中存储的动态类型调用不同的方法