从其他 class 访问 subclass 方法
Accessing subclass method from other class
所以我正在制作纸牌游戏。
我的 main 中有一个播放器类型的数组列表,我用某种类型的播放器填充了它(在这种情况下,一个好的播放器 - 好的播放器是播放器的子class一些额外的方法)
我可能只是因为看这个太久而脑死亡,但这是我的代码。
我创建了 4 个好玩家 - 再次 - goodPlayer extends player
ArrayList<Player> players = new ArrayList<>();
for (int i = 0; i < 4; i++)
{
goodPlayer gp = new goodPlayer();
players.add(gp);
}
然后在调用了几个方法之后,我想在播放器数组列表中的每个 goodPlayer 上从 goodPlayer 调用一个名为 count 的方法
for (Player p : players)
{
count(p.getHand());
}
我做错了什么,因为我目前拥有的是不正确的,除非我将计数设为静态并调用 goodPlayer.count 但是我不希望 class 在静态上下文中运行。
谢谢
你为什么不使用类型转换?您无需将 count 方法设为静态即可使用它。如果您 100% 确定该列表中的所有玩家都来自 GoodPlayer class(按照惯例,class 名称以大写字母开头),那么只需将其转换为
((GoodPlayer) player).count();
如果您不确定所有播放器是否都来自 class GoodPlayer,请添加测试以避免运行时错误:
if (player instanceof GoodPlayer) {
((GoodPlayer) player).count();
}
如果您的玩家列表总是要包含 GoodPlayer 对象,那么最好将其作为 GoodPlayers 列表
否则,用户 mehmetakcay 给出的答案最符合您的目的。
虽然您提供的信息似乎有点抽象,但您可以按照以下方式进行(使用向下转换,但不推荐):
for(Player p:players){
GoodPlayer gp=(GoodPlayer)p;
gp.count();
}
一种解决方案是在您的抽象播放器上添加一个方法 class 并在您派生的播放器类型中以不同方式实现该方法。例如:
public abstract class Player
{
public abstract int count();
}
public class GoodPlayer extends Player
{
public int count()
{
return totalHandsPlayed * 3; //Or something meaningful;
}
}
此示例显示您有一个基础 class,它要求任何继承的 classes 实现定义为抽象的方法。 (在这种情况下计数)。
所以我正在制作纸牌游戏。
我的 main 中有一个播放器类型的数组列表,我用某种类型的播放器填充了它(在这种情况下,一个好的播放器 - 好的播放器是播放器的子class一些额外的方法)
我可能只是因为看这个太久而脑死亡,但这是我的代码。
我创建了 4 个好玩家 - 再次 - goodPlayer extends player
ArrayList<Player> players = new ArrayList<>();
for (int i = 0; i < 4; i++)
{
goodPlayer gp = new goodPlayer();
players.add(gp);
}
然后在调用了几个方法之后,我想在播放器数组列表中的每个 goodPlayer 上从 goodPlayer 调用一个名为 count 的方法
for (Player p : players)
{
count(p.getHand());
}
我做错了什么,因为我目前拥有的是不正确的,除非我将计数设为静态并调用 goodPlayer.count 但是我不希望 class 在静态上下文中运行。 谢谢
你为什么不使用类型转换?您无需将 count 方法设为静态即可使用它。如果您 100% 确定该列表中的所有玩家都来自 GoodPlayer class(按照惯例,class 名称以大写字母开头),那么只需将其转换为
((GoodPlayer) player).count();
如果您不确定所有播放器是否都来自 class GoodPlayer,请添加测试以避免运行时错误:
if (player instanceof GoodPlayer) {
((GoodPlayer) player).count();
}
如果您的玩家列表总是要包含 GoodPlayer 对象,那么最好将其作为 GoodPlayers 列表
否则,用户 mehmetakcay 给出的答案最符合您的目的。
虽然您提供的信息似乎有点抽象,但您可以按照以下方式进行(使用向下转换,但不推荐):
for(Player p:players){
GoodPlayer gp=(GoodPlayer)p;
gp.count();
}
一种解决方案是在您的抽象播放器上添加一个方法 class 并在您派生的播放器类型中以不同方式实现该方法。例如:
public abstract class Player
{
public abstract int count();
}
public class GoodPlayer extends Player
{
public int count()
{
return totalHandsPlayed * 3; //Or something meaningful;
}
}
此示例显示您有一个基础 class,它要求任何继承的 classes 实现定义为抽象的方法。 (在这种情况下计数)。