什么是java中的多态方法?

Jos*_*eph 6 java polymorphism terminology

我正在研究用于SCJP测试的java语言.

理解"多态方法"有点难.

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

Cha*_*tin 19

"多态"意味着"许多形状".在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; }
}
Run Code Online (Sandbox Code Playgroud)

现在考虑一个例子

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());
Run Code Online (Sandbox Code Playgroud)

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

  • 问题是多态方法,而不是什么是多态. (2认同)

Jon*_*Jon 6

查理的答案简单地解释了多态性是什么.

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

public void Shape CreateShape() {
    return new Circle(10);
}
Run Code Online (Sandbox Code Playgroud)

它的"多态性"在某种意义上说它的签名表明你得到了一个Shape,但你真正得到的是它的一个子类Shape.既然你不确切知道你得到了什么(可能是a Circle,a Square等),你必须使用超类的接口(即多态)来处理它.

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