繁体   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