我有一个名为' Player'的非抽象类,以及一个名为' Score'的抽象类。使用'组合'的子类。在组合中,在其他子类中使用了抽象方法。
如何从非父方法调用我的抽象方法'播放器'没有让它们静止?
// 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 :(得分:0)
你做不到。这是访问修饰符,它旨在缩小对类的访问。要在您的情况下使用它,我建议您将abstract
类的public
Score
的可访问性更改为app.controller("myCtrl", function($scope) { //this is my controller
$scope.type = "type";
$scope.swapChartType = function(type) { //function for line chart and bar chart on button click
if ($scope.type == 'line') {
$scope.type = 'bar'
} else {
$scope.type = 'line';
}
alert($scope.type);
}
// this is my directive
app.directive('hcLine', function() {
return {
restrict: 'CAE',
replace: true,
scope: {
items: '=',
title:'=',
chartType: '=', //not working
},
controller: function($scope) {},
template: '<div></div>',
link: function(scope, element, attrs) {
// console.log(scope.type);
var chart = new Highcharts.Chart({
chart: {
borderWidth: 1,
backgroundColor: '#736F6E',
paddingTop:40,
marginLeft: 50,
marginRight:50,
renderTo: element[0],
type: scope.chartType
},
title: {
style:{
fontSize: 14,
},
text: scope.title
},
subtitle: {
text: null
},
xAxis: {
categories: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
],
},
series: [{
name: 'Value',
color: '#0000FF',
data: scope.items
}],
});
}
}
});
Here is my HTML:
。
答案 1 :(得分:0)
如果我理解正确,您希望通过访问CalculateScore
字段在您的派生类中实现scores
吗?
简单的答案是,你不能像你那样设计它。 private
修饰符确保只有您自己的类才能访问该字段。如果您希望派生类有权访问该字段,则必须在protected
字段上将修改器更改为scores
。
如果您不希望派生类直接访问scores
,则必须实现至少具有protected
访问权限的方法,以修改已定义的scores
字段方式,在基类上。
答案 2 :(得分:0)
所以你的情况:
Player
是正常的课程Score
是一个抽象类Combination
也是一个抽象类,它是Score
的子类。它包含一个抽象方法CalculateScore
,您希望从Player
类中调用它。Player
的数组为Score
s 您可以检查Score
数组中的元素是否为Combination
类型,然后进行投射。
if(score[0] is Combination)
{
(score[0] as Combination).CalculateScore(/* arguments here */);
}
您可能需要重新考虑您的课程如何工作。恕我直言,玩家不应该是计算分数的人。也许使用ScoreCalculatorService
来处理它。