私はSCJPテストのためのJava言語を勉強しています。Javaの多態性メソッドとは何ですか?
"多態的な方法"は少し難解です。
私のために説明できますか? または私にいくつかのリンクを教えてください?
私はSCJPテストのためのJava言語を勉強しています。Javaの多態性メソッドとは何ですか?
"多態的な方法"は少し難解です。
私のために説明できますか? または私にいくつかのリンクを教えてください?
「多型」は、「多くの形状」を意味する。 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
とそのサブクラスは、メソッドへのポリモーフィックな呼び出しを利用することを言いますエリア。
チャーリーの答えは、どのような多型であるか簡単に説明しています。
public void Shape CreateShape() {
return new Circle(10);
}
それは、その署名はあなたが「Shape
を取得して再言うという意味で「多型」ですが、実際に何をしている取得:そこから引き続き
、これは「多型法」になりますShape
のサブクラスです。あなたは何を得ているのか分かりません(Circle
、Square
など)、スーパークラスのインターフェース(多型)を使ってそれを処理する必要があります。
(多分私はJavaでわずかな経験しかないので) "多形法"はよく知られていない用語なので、何か他のものを意味するために使用されるかもしれません。これは私の解釈です。
多型は、「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
方法は、署名の多型性である:
それはjava.lang.invoke.MethodHandleクラスで宣言されています。
Object []型の仮パラメータが1つあります。
オブジェクトの戻り値の型があります。
ACC_VARARGSフラグとACC_NATIVEフラグが設定されています。
Java SE 8では、唯一のシグネチャポリモフィックメソッドは、java.lang.invoke.MethodHandleクラスのinvokeおよびinvokeExactメソッドです。オブジェクト指向プログラミングにおいて
言葉に問題がありますか(言い換えればわかりますか?)あるいは、多型の概念に問題がありますか? – delnan
まず、多型を理解していますか? – jzd
[Javaの多態性に関するSunoracleチュートリアル](http://download.oracle.com/javase/tutorial/java/IandI/polymorphism.html) – birryree