2016-03-25 16 views
-1

配列を使用してクラス内のトラクターを作成するように求められました。オブジェクトの配列を作成しようとするとエラーが発生します。オブジェクトの配列を作成する際のトラブル

他のクラスで間違ってコードを実行したり、コードの残りの部分をオブジェクトの配列に使用していないのであれば、これは正しい方法ですか?

package testTractor; 
class TestFleet { 

    public static void main(String[] args) { 

     Tractor tractor = new Tractor(); 
     Loader loader = new Loader(); 
     Harvester harvester = new Harvester(); 

     Tractor[] fleet = new Tractor[3]; 

     fleet[0] = new tractor(); 

     fleet[1] = new loader(); 

     fleet[2] = new harvester(); 


} 

    } 
+2

どのようなエラーが発生しますか?また、クラスの名前には大文字の最初の文字が必要ですが、小文字の最初の文字である 'new tractor()'を使ってコンストラクタを呼び出します。 – Berger

+1

あなたの配列のタイプはTractorなので、その中にTractor(そしてTractorを継承する他のVehicle)しか持てません。 – Whitefret

+0

また、タブに追加する構文はtab [x] = element、newを呼び出す必要はありませんx() – Whitefret

答えて

0

で試してみてください:

Tractor[] fleet = new Tractor[3]; 
fleet[0] = tractor; 
fleet[1] = loader; 
fleet[2] = harvester; 

P.S.編集済み(使用オブジェクト[]ローダーとハーベスタはトラクターを拡張しない場合)

+0

Ok、legit。しかし、それでは...あなたのオブジェクトの配列は何をすることができますか?よりよい解決策は、クラスを拡張するか、あるいはインタフェースを実装することです。 – Bakudan

+0

@Bakudan確か...私はおそらく、トラクター、ローダー、ハーベスターをグループ化するBigGuysインターフェースを作ったでしょう。しかし、掲載されたコードでは、Loaderがトラクターを拡張しているかどうかはわかりません。 –

+0

はい、でも、もっとうまくやることができると思います。もっと複雑なp-abstractクラスを提案できます。このようにして、共通のアクションをすべて保証し、クラスのユーザーに寛大であっても、基本的な実装を追加できます。 – Bakudan

1
  1. あなたは配列を定義するとき、あなたはそれをタイプ与える:

    Tractor[] fleet = new Tractor[3];

    をあなたは3つの要素の配列を持つことになりますタイプTractorです。そのため、タイプLoaderの要素を追加しようとするとエラーが発生します。 1つのタイプ(ポイント3)を追加できます。

  2. あなたは要素を追加しよう:

    fleet[0] = new tractor();

    これは間違っている - ケース - あなたはvaribleに、ではないクラスを参照してください。この方法。あなたはバリエーションからインスタンスを作ることはできません(少なくともこのようなことはありません)。あなたはケースを変更する場合は、class Tractorを参照します:

    fleet[0] = new Tractor();

  3. 基本OOPを - ために、このすべてを、私はあなたが意図したと同様に、クラスVehicleを追加動作するように。車を拡張するすべてのクラスは、車両になりますので、安全にお使いのアレイに追加することができます。

    class Vehicle{}

    と他のクラスのすべてのそれを拡張:

    public class Tractor extends Vehicle { ... }

このようにして、「車」、「トラック」などの「車両」を追加できます。

最後に:

Vehicle[] fleet = new Vehicle[3]; 
fleet[0] = new Tractor(); 
fleet[1] = new Loader(); 
fleet[2] = new Harvester(); 
関連する問題