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