親クラスを書くと(あなたの例では - フルーツ)、おそらく簡単になるでしょう:
class Fruit {
int price;
void myFunction(int price) {
this.price = price;
}
class Apple extends Fruit { }
class Orange extends Fruit { }
public static void main(String[] args) {
List<Fruit> fruits = new ArrayList<>();
//create 3 apple object to list
fruits.add( new Apple() );
fruits.add( new Apple() );
fruits.add( new Orange() );
Fruit f = fruits.get(0);
f.myFunction(10); // now you can use methods writed in Fruit class
// or if you want to cast it to child class:
Apple apple = (Apple) f;
// but if u not sure about fruit's class, check at first:
if (f instanceof Apple) {
System.out.println("first fruit is an apple");
} else if (f instanceof Orange) {
System.out.println("first fruit is an orange");
} else {
System.out.println("first fruit is some another fruit");
}
}
このコード:List<Fruit> fruits = new ArrayList<>();
は、 list に格納されているすべてのオブジェクトが の型Fruit
または子である必要があることを意味しますFruit
。そして、このリストはFruit
メソッド経由でオブジェクトのみを返しますget()
。コードでは になるObject
ため、使用する前に子オブジェクトにキャストする必要があります。
または、私の例では、タイプをキャストする必要のないすべての果物に同じメソッドを使用する場合は、すべて同じメソッドを持つスーパークラスを 1 つ作成するだけです。
私の英語でごめんなさい。