簡體   English   中英

如何從非父類調用抽象類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM