2011-01-05 72 views
2

我正在学习用于SCJP测试的Java语言。java中的多态方法是什么?

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

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

+0

你有这个术语的麻烦(即会意译帮助)?或者你有没有多态的概念? – delnan 2011-01-05 15:19:45

+0

首先你明白多态吗? – jzd 2011-01-05 15:20:20

+0

[Sunoracle教程的多态性的Java(http://download.oracle.com/javase/tutorial/java/IandI/polymorphism.html) – birryree 2011-01-05 15:22:50

回答

16

“多态”意思是“多种形状”。在Java中,可以使用具有不同事物的子类的超类,使用相同的名称。传统的例子是超类Shape,其子类为Circle,SquareRectangle,以及方法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及其子类利用该方法调用的多态性区。

5

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

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

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

这是在这个意义上“多态”,其签名说你是得到一个Shape,但你是什么真正越来越是Shape的一个子类。既然你不知道你得到了什么(可能是CircleSquare等),你必须使用超类的接口(即多态性)来处理它。

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

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

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

0

polymorphic method in java

在面向对象的编程中,多态性是指一种编程语言的以不同的方式处理对象这取决于它们的数据类型或类的能力。更具体地说,它是重新定义派生类的方法的能力。

相关问题