我正在尝试使用内部类,我对它们有些疑问 我有一个gameObject类如下
import java.io.*;
public abstract class GameObject implements Serializable {
protected enum GAME_OBJECT_TYPE {SNARK, HINT, BONUS_ITEM, INVALID};
protected GAME_OBJECT_TYPE eGameObjectType;
protected GameObject() {
eGameObjectType = (GAME_OBJECT_TYPE.INVALID);
System.out.println("SOMETHING WENT WRONG");
}
public class Snark extends GameObject implements Serializable {
public Snark() {
eGameObjectType = (GAME_OBJECT_TYPE.SNARK);
System.out.println("SNARK LIVES HERE");
}
}
public class Hint extends GameObject implements Serializable {
public Hint() {
eGameObjectType = (GAME_OBJECT_TYPE.HINT);
System.out.println("HINT LIVES HERE");
}
}
}
使用这个GameObject类结构,我没有错误,但我可以在没有错误的情况下在我的GameFrame中实例化Snark的唯一方法是
GameObject mySnark = new GameObject.Snark(); // all good
GameObject mySnark = new Snark(); // cannot be resolved
然而,当我将gameObject类更改为
时import java.io.*;
public abstract class GameObject implements Serializable {
protected enum GAME_OBJECT_TYPE {SNARK, HINT, BONUS_ITEM, INVALID};
protected GAME_OBJECT_TYPE eGameObjectType;
protected GameObject() {
eGameObjectType = (GAME_OBJECT_TYPE.INVALID);
System.out.println("SOMETHING WENT WRONG");
}
}
public class Snark extends GameObject implements Serializable { // The public type Snark must be defined in its own file
public Snark() {
eGameObjectType = (GAME_OBJECT_TYPE.SNARK);
System.out.println("SNARK LIVES HERE");
}
}
public class Hint extends GameObject implements Serializable {
public Hint() {
eGameObjectType = (GAME_OBJECT_TYPE.HINT);
System.out.println("HINT LIVES HERE");
}
}
我现在可以在我的GameFrame中实例化一个Snark为
GameObject mySnark = new Snark(); // no errors
我可以再次将每个对象重新拆分为自己的类,但它认为这可能是一种大大减少我目前所拥有的类数的方法。
有人可以帮助我理解我的错误吗?
谢谢
答案 0 :(得分:1)
内部类并不意味着减少项目中的类数(正如您的问题所示);它是关于逻辑地将功能分组到某个父类,最常见的是特定于父类的辅助类。内部类通常也不会扩展其包含的父类。
根据您的示例,似乎需要在Snark
之外实例化GameObject
类型的对象,这表明Snark
应该是一个独立的类。
来自Oracle JavaDoc的inner classes的更多信息。