Java-内部类

Java-内部类,java,inner-classes,Java,Inner Classes,我正在尝试与内部类一起工作,我想问一些关于它们的问题 我有一个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; p

我正在尝试与内部类一起工作,我想问一些关于它们的问题 我有一个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类结构,我不会出错,但我能在游戏框架中实例化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");
    }
}
我现在可以在我的游戏框架中将Snark实例化为

GameObject mySnark = new Snark();   // no errors
我可以再次将每个对象重新拆分为它自己的类,但它认为这可能是一种大大减少我当前拥有的类数量的方法

有人能帮我理解我做错了什么吗


谢谢

内部类并不意味着要减少项目中的类数量(如您的问题所示);它是关于在逻辑上将功能分组到某个父类,最常见的是针对特定于父类的帮助器类。内部类通常也不会扩展其包含的父类

根据您的示例,似乎需要在
GameObject
之外实例化
Snark
类型的对象,这表明
Snark
应该是一个独立的类


有关Oracle JavaDoc的更多信息。

通过将各种类(snark等)移动到GameObject中,您试图实现什么?好吧,编译器是对的:您必须对这些类型的内部类使用不同的语法。我认为您可能混淆了内部类和继承;这两个完全不同。编译器是正确的,你必须在实例化时完全限定内部类。大家好,哇,答案真快。将子类移动到父类中只是减少了文件的数量,因为每个子类只有一个属性,所以我认为内部类可能是一种很好的方法。是的,我认为我混淆了亲子和内部类。嗨,酷机器人们,谢谢你们给我的答案。是的,我认为我在内部类和父-子类之间仍然很不稳定。