我主要是一名 C#、.NET 开发人员,习惯 C# 中的接口和 TDD。C# 中的接口主要定义实现时的契约。Java 中的用法似乎略有不同。特别是,我遇到的每个项目似乎都实现了用于访问应用程序的基本接口,就好像任何 Java 应用程序都需要使用接口一样。我想我缺少一些基本的理解,所以我真的很感激任何关于我可以阅读的好入门书的提示。例如,我有一个如下所示的测试(在我的解决方案中的单独“测试”文件夹中):Tests.javapackage com.dius.bowling;class DiusBowlingGameTest { private BowlingGame bowlingGame; @BeforeEach void setUp() { this.bowlingGame = new DiusBowlingGame(); this.bowlingGame.startGame(); }为了能够访问,this.bowlingGame.startGame();我需要将该方法添加到接口中。为什么?我不知道 Java 和 C#/.NET 之间似乎存在差异?界面package com.dius.bowling;/** * Interface for a bowling game. */public interface BowlingGame { /** * roll method specifying how many pins have been knocked down * @param noOfPins no. of pins knocked down */ void roll(int noOfPins); /** * get player's current score * @return player's current score */ int score(); void startGame();}Dius保龄球游戏package com.dius.bowling;/** * Scoring system for tenpin bowls */public class DiusBowlingGame implements BowlingGame { ArrayList<BowlingFrame> gameFrames = new ArrayList<BowlingFrame>(); public void roll (int noOfPins) { /* Implementation */ } } /** * Activate the 1st frame of the game */ public void startGame() { advanceFrame(); };
2 回答
慕神8447489
TA贡献1780条经验 获得超1个赞
如果它不在接口中,并且您将引用存储在接口类型的变量中,那么编译器如何知道该方法存在?
一般来说,分配给变量的值可以是 的任何实现BowlingGame。除非该方法位于接口上,否则不需要这些类实现该方法。
为了避免将方法添加到接口中,请将变量类型更改为DiusBowlingGame,或在方法中使用局部变量setUp:
DiusBowlingGame bowlingGame = new DiusBowlingGame();
bowlingGame.startGame();
this.bowlingGame = bowlingGame;
陪伴而非守候
TA贡献1757条经验 获得超8个赞
据我所知,接口在 C# 和 Java 中的工作方式是相同的。唯一的区别是,在 C# 中,通常以“I”开头来命名接口,并且在 C# 中,类和接口都使用运算符,而在:Java 中,关键字implements用于接口,关键字extends用于类。您的代码不需要接口,它也可以这样完美地工作:
package com.dius.bowling;
class DiusBowlingGameTest {
private DiusBowlingGame bowlingGame;
@BeforeEach
void setUp() {
this.bowlingGame = new DiusBowlingGame();
this.bowlingGame.startGame();
}
添加回答
举报
0/150
提交
取消