2011-01-05 87 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

在面向對象的編程中,多態性是指一種編程語言的以不同的方式處理對象這取決於它們的數據類型或類的能力。更具體地說,它是重新定義派生類的方法的能力。

相關問題