Java 通过构造函数和“this”关键字重新分配对象
我正在尝试扩展我的程序,以允许不同的NPC具有相似的代码库。我想有一个超类NPC,每个生物都有不同的子类。在这里,我将它们称为Enemy1、Enemy2和Enemy3 我还想通过NPC敌人=新NPCenemyID;,将任何给定NPC分配给一个变量;,其中enemyID是一个整数,表示NPC的游戏内id,让Enemy1的id=1,Enemy2的id=2,Enemy3的id=3 即使这样做行得通,实际上行吗?我还没有测试它,因为实际代码将具有更深入的特性:Java 通过构造函数和“this”关键字重新分配对象,java,constructor,this,Java,Constructor,This,我正在尝试扩展我的程序,以允许不同的NPC具有相似的代码库。我想有一个超类NPC,每个生物都有不同的子类。在这里,我将它们称为Enemy1、Enemy2和Enemy3 我还想通过NPC敌人=新NPCenemyID;,将任何给定NPC分配给一个变量;,其中enemyID是一个整数,表示NPC的游戏内id,让Enemy1的id=1,Enemy2的id=2,Enemy3的id=3 即使这样做行得通,实际上行吗?我还没有测试它,因为实际代码将具有更深入的特性: public class NPC {
public class NPC
{
public NPC(int id)
{
switch (id)
{
case 1:
{
this = new Enemy1();
break;
}
case 3:
{
this = new Enemy3();
break;
}
case 3:
{
this = new Enemy3();
break;
}
}
}
//Various default and shared methods will follow
}
public class Enemy1 extends NPC
{
//Various variables specific to this enemy
public Enemy1() //LOL
{
//Assign default values
}
//Default methods overwritten and enemy-specific methods go here
}
我不确定这是否会编译,因为我还没有完整的实现,但我只想知道对象是否可以以这种方式自我重新分配,以及这是否是一个不错的编程选择。如果您需要澄清,请让我知道,并请在您的答案中告诉我原因,这样我就可以学习,而不仅仅是得到一个是/否的答案,因为我是自学成才的,所以反馈特别有用。因为您目前有反馈,所以它不会编译。您要使用的模式称为a,在这里,您不直接创建对象,而是使用各种参数调用工厂函数,该函数创建并返回相应的对象 一个非常非常基本的示例可以如下所示:
public class Enemy1 extends NPC {
}
public class Enemy2 extends NPC {
}
public class NPCFactory {
public static NPC makeNPC(int npcType) {
if(npcType==1){ return new Enemy1(); }
elif(npcType==2) {return new Enemy2(); }
}
}
随着代码的增长,您可能希望用适当的枚举替换int-npcType,以便让未来的开发人员(即您未来的自己)更清楚地了解代码的行为。您还可以根据需要向工厂添加任意多的参数,使其能够使用所需的任何参数一次性创建一个功能齐全的NPC。尝试使用工厂方法,返回新构造的类。您认为这是什么?这是一个对象用来表示自身的关键字。但是,这里它不适用,因为答案不需要它;根据您的示例,每个NPC的实现都位于源代码的顶部?完全正确。另一种常见模式是将某种相关信息放入工厂本身,在这种情况下,您需要创建一个NPC工厂,然后反复使用它来创建NPC。在这种情况下,您需要从makeNPC方法中取出静态声明。