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。