[英]How to call a non abstract method of an abstract class directly without deriving the abstract class?
[英]How to call abstract class from non parent
我有一個名為“ Player”的非抽象類,還有一個名為“ Score”的抽象類,其子類為“ Combination”。 在Combination中,還有用於其他子類的abstract方法。
我如何從非父方法“ Player”中調用我的抽象方法而又不使其變為靜態?
// 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];
你不能。 這是訪問修飾符,旨在縮小對類的訪問。 要在您的情況下使用它,建議將Score
類的可訪問性從abstract
更改為public
。
如果我理解正確,您是否想通過訪問scores
字段在派生類中實現CalculateScore
?
簡單的答案是,您不能按照這種方式設計。 private
修飾符確保只有您自己的類可以訪問該字段。 如果您希望派生類可以訪問該字段,則必須將您的修飾符更改為scores
-field上的protected
。
如果您不希望派生類直接訪問scores
,則必須實現至少具有protected
訪問權的方法,這些方法必須在基類上以定義的方式修改scores
-field。
所以你的情況:
Player
是普通班 Score
是一個抽象類 Combination
也是一個抽象類,它是Score
子類。 它包含您要從Player
類內部調用的抽象方法CalculateScore
。 Player
具有一個Score
數組 您可以檢查Score
數組中的元素是否為Combination
類型,然后進行轉換。
if(score[0] is Combination)
{
(score[0] as Combination).CalculateScore(/* arguments here */);
}
但是,您可能需要重新考慮您的課程是如何工作的。 恕我直言,玩家不應該是計算得分的人。 也許使用ScoreCalculatorService
來處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.