*JAVA-多形性(多態性)(2)例2エラー
参照変数とインスタンスの関連付け
親クラスと子クラスでメンバー変数を繰り返し定義します.
class BindingaTest{
public static void main(String[] args){
Parent p = new Child();
Child c = new Child();
System.out.println("p.x = " + p.x);
p.method();
System.out.println("c.x = " + c.x);
c.method();
}
}
class Parent{
int x = 100;
void method()
{
System.out.println("Parent Method");
}
}
class Child extends Parent{
int x = 200;
void method()
{
System.out.println("Child Method");
}
}
실행결과
p.x = 100
Child Method
c.x = 100
Child Method
タイプは異なりますが、参照変数pとcはChildインスタンスを参照します.ParentクラスとChildクラスは同じメンバーを定義します.メソッド入力メソッド()では、参照変数のタイプにかかわらず、実際のインスタンスのタイプChildクラスで定義されたメソッドが呼び出されますが、インスタンス変数xは参照変数のタイプに依存します.
class BindingaTest2{
public static void main(String[] args){
Parent p = new Child();
Child c = new Child();
System.out.println("p.x = " + p.x);
p.method();
System.out.println("c.x = " + c.x);
c.method();
}
}
class Parent{
int x = 100;
void method()
{
System.out.println("Parent Method");
}
}
class Child extends Parent{}
실행결과
p.x = 100
Parent Method
c.x = 200
Parent Method
子クラスで祖先クラスのメンバーを繰り返し定義していない場合、参照変数のタイプは変わりません.
どのクラスのメンバーを呼び出すかは選択されていません.つまり、祖先のメンバーが呼び出され、子孫のメンバーが呼び出されるべきです.
参照変数のタイプによって結果が異なる場合は、子クラスで祖先クラスのメンバー変数と同じ名前のメンバー変数を繰り返し定義します.
class BindingaTest3{
public static void main(String[] args){
Parent p = new Child();
Child c = new Child();
System.out.println("p.x = " + p.x);
p.method();
System.out.println("c.x = " + c.x);
c.method();
}
}
class Parent{
int x = 100;
void method()
{
System.out.println("Parent Method");
}
}
class Child extends Parent{
int x = 200;
void method()
{
System.out.println("x = " + x);
System.out.println("super.x =" + super.x);
System.out.println("this.x =" + this.x);
}
}
실행결과
p.x = 100
x=200
super.x = 100
this.x = 200
c.x = 200
x = 200
super.x = 100
this.x = 200
パラメータの多形性
class Product{
int price; //제품 가격
int bonusPoint; //제품구매시 제공하는 보너스점수
}
class Tv extends Product{]
class Computer extends Product[]
class Audio extends Product[]
class Buyer{
int money = 1000; //소유금액
int bonusPoint = 0; //보너스점수
}
void buy(Tv t){
//Buyer가 가진 돈 에서 제품의 가격(t.price)만큼 뺀다.
money = money - t.price;
//Buyer의 보너스점수에 제품의 보너스 점수를 더한다
bonusPoint = bonusPoint + t.bonusPoint;
}
以上の方法ではTvしか購入できないので、他の製品を購入する方法も必要です.void buy(Computer c){
//Buyer가 가진 돈 에서 제품의 가격(c.price)만큼 뺀다.
money = money - c.price;
//Buyer의 보너스점수에 제품의 보너스 점수를 더한다
bonusPoint = bonusPoint + c.bonusPoint;
}
void buy(Audio a){
//Buyer가 가진 돈 에서 제품의 가격(a.price)만큼 뺀다.
money = money - a.price;
//Buyer의 보너스점수에 제품의 보너스 점수를 더한다
bonusPoint = bonusPoint + a.bonusPoint;
}
メソッドのパラメータに多形性を適用すると、以下に示すように、単純に1つの方法として処理することができる. void buy(Product p){
money = money - p.money;
bonusPoint = bonusPoint + p.bonusPoint;
}
配列による複数のオブジェクトの処理
Product p[] = new Product[3];
p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();
これにより、祖先タイプの参照変数配列を使用すると、共通の祖先を持つ異なるタイプのオブジェクトを1つの配列に組み合わせることができます.Reference
この問題について(*JAVA-多形性(多態性)(2)例2エラー), 我々は、より多くの情報をここで見つけました https://velog.io/@jo_dbsgh95/JAVA-다형성-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol