2011-01-05 7 views
2

私はSCJPテストのためのJava言語を勉強しています。Javaの多態性メソッドとは何ですか?

"多態的な方法"は少し難解です。

私のために説明できますか? または私にいくつかのリンクを教えてください?

+0

言葉に問題がありますか(言い換えればわかりますか?)あるいは、多型の概念に問題がありますか? – delnan

+0

まず、多型を理解していますか? – jzd

+0

[Javaの多態性に関するSunoracleチュートリアル](http://download.oracle.com/javase/tutorial/java/IandI/polymorphism.html) – birryree

答えて

16

「多型」は、「多くの形状」を意味する。 Javaでは、同じ名前を使って異なることを行うサブクラスを持つスーパークラスを持つことができます。従来の例は、サブクラスCircle,Square、およびRectangle、およびメソッドarea()を持つスーパークラスShapeです。

ので、例えば

// 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()Square.area()を呼び出しs[1].area()Circle.area()を呼び出す例を考える - ので、私たちはShapeとそのサブクラスは、メソッドへのポリモーフィックな呼び出しを利用することを言いますエリア。

5

チャーリーの答えは、どのような多型であるか簡単に説明しています。

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

それは、その署名はあなたが「Shapeを取得して再言うという意味で「多型」ですが、実際に何をしている取得:そこから引き続き

、これは「多型法」になりますShapeのサブクラスです。あなたは何を得ているのか分かりません(CircleSquareなど)、スーパークラスのインターフェース(多型)を使ってそれを処理する必要があります。

(多分私はJavaでわずかな経験しかないので) "多形法"はよく知られていない用語なので、何か他のものを意味するために使用されるかもしれません。これは私の解釈です。

0

多型は、「1つのフォームを多くの形式で表現する」プロセスです。

プログラミングの概念ではありませんが、それは原則の1つです。

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 []型の仮パラメータが1つあります。

オブジェクトの戻り値の型があります。

ACC_VARARGSフラグとACC_NATIVEフラグが設定されています。

Java SE 8では、唯一のシグネチャポリモフィックメソッドは、java.lang.invoke.MethodHandleクラスのinvokeおよびinvokeExactメソッドです。オブジェクト指向プログラミングにおいて

JVM specification 2.9. Special Methods

0

polymorphic method in java

、多型は、それらのデータ型またはクラスに応じて異なるオブジェクトを処理するためのプログラミング言語の能力を指します。具体的には、派生クラスのメソッドを再定義する機能です。

関連する問題