2017-05-19 3 views
1

私はクラスを持っていますが、インターフェイス 'IStarcraft'を実装する 'Starcraft'の派生クラスであるCargoShipと言えます。 )(」同様にgetCountを宣言派生クラスで静的に 'count'を設定する必要があります。どのようにアクセスするのですか?

public static void printInstanceNumberPerClass (ArrayList<ISpacecraft> fleet){} 

あり、私が考える解決策だと私はそれが動作すると確信している、:

この

は、すべての船の数(インスタンス数)を返すべき関数であります'をISpacecraftに入れ、各SpaceCraft船(私は4つの船がある)でそれを上書きし、それらの誰もが多形性を反復するだけです。 さて、私はそれを得た。関数は静的なので(はい、私はそれを使用するオブジェクトを作成する必要はありません知っている)私はそれが私に別の何かを教えるかもしれないと思った。それはどういう意味ですか?代わりに、すべての船に「静的カウント= 0」を作成することは可能ですか?何とかそれにアクセスしますか?

質問はです。私はISpacecraftオブジェクトのarraylistを取得すると、その静的フィールドにどのようにアクセスできますか?

+2

これは悪いですね。スター船を作るための工場の方法を作る。工場では、各スター船をArrayListのようなリストに追加します。クラス(特にインターフェース)に焼き付けられた静的メソッドは悪魔であり、避けるべきです。 – markspace

+0

はい、私は静的がすべてのクラスの間で共有されるので、それは悪いと思います。悪いアイデア。ごめんなさい。感謝の印! –

答えて

1

多型は静的メソッドでは機能しません。メソッドの解像度は大きく異なります。インスタンス上の仮想メソッドの場合、コードはスーパークラスまたはインタフェースとして型指定された変数を持つオブジェクトを参照している可能性があります。メソッドの呼び出しは、アプリケーションコードが正確な具体的な型を知る必要なく実行時に解決されます。静的メソッドの場合は、特定のクラスで呼び出すと、メソッドが見つからない場合は、スーパークラスで呼び出されます。あなたのコードはいくつかのサブクラスから始める必要があり、解像度はそこから階層を操作します。静的メソッドの場合、メソッドを呼び出すための低レベルのクラス、オブジェクトのインスタンスメソッドでできる方法を知ることはできません。オブジェクトを使用して抽象度を引き継ぐことはできません。

マークスペースによるコメントは、はるかに優れた代替方法です。 java.lang.Mathなどのステートレス関数には静的メソッドを使用します。

関連する問題