【问题标题】:Double nested classes双嵌套类
【发布时间】:2014-06-22 22:07:10
【问题描述】:

我一直在尝试做人,在第三版之后,在我了解到嵌套类的存在之后,决定从头开始。到目前为止,我已经输入了这个:

public class Person {
    public Person() {
        side left = new side();
        side.limb arm = left.new limb();
        left.arm.hi();
        // Arm can not be resolved or is not a field.
    }

    class side {
        class limb {
            public void hi() {
                System.out.println("Hi");
            }
        }
    }

}

我该如何解决这个问题?我从来没有尝试过在类中嵌套类,我真的希望它能够工作,但是:

  1. 它只需要写在一个类文件中,所以我可以有嵌套类但只有一个大的公共类文件。

  2. 我希望能够使用“arm.left.method”或“left.arm.method”来使用左臂的方法。因为我想指定我说的是哪只手臂。

【问题讨论】:

  • leftside 类的实例,并且该类没有任何arm 字段,因此您不能使用left.arm。你想在这里实现什么?可能是arm.hi() 而不是left.arm.hi()(这里arm 是在构造函数中创建的local 变量,而不是side 类的field)?
  • 不确定您的语法是否正常。但如果有的话,它不是left.arm.hi();,它只是arm.hi();。在您的代码中,arm 是它自己的指针,而不是 left 的一部分。
  • 只需将您的 arm 指针重命名为 leftArm
  • 您的“只有一个类文件”要求意味着您不能使用这种方法。嵌套类编译成单独的类文件。

标签: java class constructor nested


【解决方案1】:

我相信您遇到的问题是您将 Limb 视为 Side 类中的成员变量。即您使用 side.limb 就好像该类是编写的一样:

class Side {
    public Limb sidesLimb;

    class Limb {
        public void hi();
        System.out.println();
    }
}

现在您可以执行以下操作:

Side left = new Side();
left.sidesLimb = new Limb();
left.sidesLimb.hi();

基本上,您忘记在 Side 类中添加一个 Limb 类型的成员变量。

【讨论】:

    【解决方案2】:

    好的。为了保持我的能力来指定它是哪一边,我做了以下事情:

    public class Person{
        public static void main(String[] args){
        Person joe = new Person();  
    }
    public Person(){
    doubleLimb arm = new doubleLimb();
    arm.left.hi();
    }
    class doubleLimb{
        limb right;
        limb left;
        public doubleLimb(){
            left = new limb();
            right = new limb();
        }
    }
    class limb{
        public void hi(){
        System.out.println("Hi");
        }
        }
    }
    

    它的作用基本上是针对有左和右的事物,它使肢体名称成为一个空类的名称,该类只创建名为左右的新肢体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      • 2020-11-18
      相关资源
      最近更新 更多