0

Java コード:

import java.util.ArrayList;
import java.util.List;

class apple{
int price;

public void myFunction(int iPrice)
{
    price=iPrice;
}
}

class orange{
int price;

public void myFunction(int iPrice)
{
    price=iPrice;
}
}

public class main {

public static void main(String[] args) {
    List <Object> list= new ArrayList<>();

    //create 3 apple object to list
    list.add( new apple() );
    list.add( new apple() );
    list.add( new orange() );

    list.get(0). /* "get(0)." this isn't using apple object and my function */

}
}
4

4 に答える 4

2

親クラスを書くと(あなたの例では - フルーツ)、おそらく簡単になるでしょう:

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 つ作成するだけです。

私の英語でごめんなさい。

于 2012-06-17T19:12:16.107 に答える
2

このメソッドは参照をlist.get(0)返すObjectため、それを にダウンキャストする必要がありますapple。ややこのように:

apple a = (apple)list.get(0); 

そして、関数を呼び出します。

Apple注: Java のクラス名は、 , のように大文字にすることをお勧めします。Orange

于 2012-06-17T19:14:18.057 に答える
0

あなたはそのようにそれを使用することができます..:

 apple a=(apple)list.get(0); 
 a.myFunction(10);
于 2012-06-17T19:08:02.867 に答える
0

リスト内のオブジェクトは、オブジェクトとしてのみ扱われるようになりました。特定の型になるように明示的にキャストする必要があります。

例えば:

Apple a = (apple) list.get(0);

リストが保持するオブジェクトの種類を決定するには、以下に示すように実行できます。

for (Object o : list) {
   if (o instanceof apple){
      // do something....
   }
   else if (o instanceof mango){
      // do something....

   }
}
于 2012-06-17T19:05:58.530 に答える