好吧所以我对“扩展”和“工具”的使用感到困惑。让我举一个场景,假设我正在制作一个简单的塔防游戏。所以我的理解是,如果我创建了一个类(TowerBase.java),我可以用变量和方法填充它,例如; int hp,int damage,int attack(){...}等....我想我可以制作多种类型的塔,让我们说一个是射手塔,在TowerArcher.java里面我想设置TowerBase的变量为所述塔的唯一值。我的理解是,在TowerArcher内部,如果我扩展TowerBase,我可以访问所有TowerBase的变量和方法,因为TowerBase现在是父类。所以我尝试了这个:
public class TowerBase {
//Health (Range: 1-100)
int hp;
public int attack(int blah){
//Blah blah how the tower goes about attacking foe
}
然后在TowerArcher.java
public class TowerArcher extends TowerBase{
//Set TowerArcher's unique values
hp = 10;
}
现在游戏的某个地方......
TowerArcher archer;
archer.attack(blah);
Eclipse在TowerArcher.java中以“hp = 10;”抛出此语法错误:此标记之后的VarableDeclaratorId。我认为它说它不知道什么是HP。这让我感到困惑,因为我认为它会知道什么是HP,因为它在父类中。我找到了解决办法,但它们看起来并没有那么有效,即使它们有效,它们仍然让我感到困惑的是扩展和实现是什么。基本上我想在这里找到的是;
1:扩展的作用是什么?2:我如何直观地使用程序中的扩展?3:实现了什么?4:我如何直观地在程序中使用工具
5:在这种场景中我应该使用什么,我有许多不同的物体(塔)做几乎相同的事情,也许TowerArcher TowerBunker TowerSnipernest TowerBarricade等。
我知道我要求一个很多,但我找不到一个好的帖子,所以这也可以帮助其他人:)。PS如果我遗漏任何所需信息,请告诉我。我现在很无能为力。
答案 0 :(得分:1)
您的问题与extends
和implements
之间的差异无关。您似乎对继承如何工作有一个很好的理解,或者至少你所说的没有错。你只是弄乱了语法。您需要在构造函数中设置hp
:
public class TowerArcher extends TowerBase {
// Can't set hp here; the syntax just doesn't work that way.
// hp = 10;
public TowerArcher() {
// Initialize it here, instead.
// This runs when you construct a TowerArcher.
hp = 10;
}
}
答案 1 :(得分:1)
public class TowerArcher extends TowerBase{
//Set TowerArcher's unique values
hp = 10; //define your data type here..
}
您的问题的答案。
extends用于扩展类或将接口扩展到另一个接口。您只能在java中扩展一个类。当A扩展B时,A继承了B的行为。
TowerArcher扩展了TowerBase。
implements用于实现接口。您可以在java中为一个类实现多个接口。您必须覆盖类中接口中的所有方法签名。
将抽象类型的方法放在接口中并将其实现到您的类中。
创建抽象类或接口作为基类,并在其中放置常见行为。
答案 2 :(得分:1)
在你的示例代码中,你试图在类体中设置变量值 - 因为类体的直接内容永远不会被执行(字段初始化除外),所以它是无效的。您必须将代码放入某个方法(例如构造函数)。
public class TowerArcher extends TowerBase{
public TowerArcher() {
super(); //set values as in TowerBase constructor
hp = 10; //archers don't wear armor, so they have low HP.
}
}
extends
只使用指定父类的形式作为后代字段,并作为方法的基础,但不必覆盖。可以在扩展对象中访问超类中设置为public
或protected
(但不是private
)的字段(这是extends
关键字后面的类的正式名称)。
在您的计划中,您正确使用extends
。新类型的塔将带来新的类,这将扩展TowerBase
。
请注意,extends
个关键字只能将一个类用作父级。
implements
实现接口(接口,因为您可以实现更多接口)。在理论基础上,接口类似于超类,但它们通常只包含一个属性,并且它们随之操作。在你的程序中,你可以创建IFlameThrowing
或IStoneThrowing
接口,这些接口只管理混凝土塔的一个属性(例如,弓箭手不能扔石头,但它们可以射箭)。
你有许多不同的塔,所以创建结构将所有提到的东西划分为塔和属性。然后实现它。如果你想允许玩家在游戏过程中向他的塔增加升级(例如学习弓箭手如何投掷石块),请使用装饰模式。