2016-05-30 15 views
0

私は抽象クラスが 'Player'であり、抽象クラスは 'Score'で、サブクラスは 'Combination'です。 Combination内には抽象メソッドがあり、さらに別のサブクラスで使用されます。非親クラスから抽象クラスを呼び出す方法

私の抽象メソッドは、「プレーヤ」以外のメソッドから静的に呼び出さないでどのように呼び出すことができますか?

// This is the abstract method within Combination, 
// it uses the face values from rolled dice to calculate the score. 

abstract public int CalculateScore(int[] faceValues); 

//Array of 'Score's in Player 

private Score[] scores = new Score[10]; 
+0

Playerとコンビネーションクラスに関する詳細をお知らせください。 faceValuesとは – Silvinus

答えて

0

できません。これはアクセス修飾子であり、クラスへのアクセスを制限するように設計されています。あなたのケースでそれを使用するには、アクセシビリティをabstractからpublicまでScoreクラスに変更することをお勧めします。

0

私が正しく理解している場合は、scoresフィールドにアクセスして派生クラスにCalculateScoreを実装しますか?

簡単な答えは、あなたがそのように設計したものではありません。 private修飾子を使用すると、自分のクラスだけがフィールドにアクセスできます。派生クラスがそのフィールドにアクセスできるようにするには、scores -fieldの修飾子をprotectedに変更する必要があります。

あなたの派生クラスが直接scoresへのアクセス権を持ってしたくない場合は、基本クラスで、定義された方法でscores -fieldを変更する少なくともprotectedアクセスメソッドを実装する必要があります。

0

だからあなたの状況:

  • Player通常classs
  • Score
  • Combination抽象クラスですがScoreサブクラスあまりにも抽象クラスです。それには、Playerクラスの中から呼び出したい抽象メソッドCalculateScoreが含まれています。
  • PlayerはあなたのScore配列の要素の型Combinationである場合は、それを唱える確認することができますScore

のアレイを有します。

if(score[0] is Combination) 
{ 
    (score[0] as Combination).CalculateScore(/* arguments here */); 
} 

あなたはあなたのクラスはしかしどのように機能するかを再考する必要がある場合があります。 IMHO、プレイヤーはスコアを計算するべきではありません。おそらくそれを処理するためにScoreCalculatorServiceを使用してください。

関連する問題