Java - 内部 类
Java - Inner Classes
我正在尝试与内部 classes 一起工作,我对它们有一些疑问
我有一个 gameObject class 如下
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 class 结构我没有得到任何错误,但是我可以在我的 GameFrame 中实例化一个 Snark 而没有错误的唯一方法是
GameObject mySnark = new GameObject.Snark(); // all good
GameObject mySnark = new Snark(); // cannot be resolved
但是当我将游戏对象 class 更改为
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
我可以再次将每个对象重新拆分为自己的 class,但它认为这可能是一种大大减少我目前拥有的 class 数量的方法。
谁能帮我理解我做错了什么?
谢谢
内部 classes 并不意味着减少项目中 classes 的数量(正如你的问题所暗示的);它是关于在逻辑上将功能分组到某个父 class,最常见的是针对特定于父 class 的助手 classes。内部 classes 通常也不会扩展其包含的父级 class.
根据您的示例,似乎需要在 GameObject
之外实例化 Snark
类型的对象,这表明 Snark
应该是一个独立的 class。
有关 inner classes 的更多信息来自 Oracle 的 JavaDoc。
我正在尝试与内部 classes 一起工作,我对它们有一些疑问 我有一个 gameObject class 如下
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 class 结构我没有得到任何错误,但是我可以在我的 GameFrame 中实例化一个 Snark 而没有错误的唯一方法是
GameObject mySnark = new GameObject.Snark(); // all good
GameObject mySnark = new Snark(); // cannot be resolved
但是当我将游戏对象 class 更改为
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
我可以再次将每个对象重新拆分为自己的 class,但它认为这可能是一种大大减少我目前拥有的 class 数量的方法。
谁能帮我理解我做错了什么?
谢谢
内部 classes 并不意味着减少项目中 classes 的数量(正如你的问题所暗示的);它是关于在逻辑上将功能分组到某个父 class,最常见的是针对特定于父 class 的助手 classes。内部 classes 通常也不会扩展其包含的父级 class.
根据您的示例,似乎需要在 GameObject
之外实例化 Snark
类型的对象,这表明 Snark
应该是一个独立的 class。
有关 inner classes 的更多信息来自 Oracle 的 JavaDoc。