【问题标题】:I've got trouble with inner and static inner class at java我在java中遇到了内部和静态内部类的问题
【发布时间】:2015-05-01 18:30:54
【问题描述】:

首先,感谢所有阅读该主题的人。
if 语句如何在测试类中变为真?我找不到任何解决方案。我无法在这些方法中编写任何代码。我试图从 Room 类 numberOfTiger 发送到类 Question 的方法,但我没有实现。
那是关于,如何将 int 变量(numberofTiger)更改为 Cat.Tiger 变量的问题。之后 if 语句变为 true 以调用 (getNumberOfTiger) 方法。

public class Test {

    public static void main(String[] args) {

        Animal an = new Animal();
        Animal.Cat an1 = an.new Cat();
        Animal.Cat.Tiger an2 = an1.new Tiger(3, 900, 2);

        if (Animal.Question.getnumberOfTiger(an2) == 3) {
            System.out.println("True");
        }
    }
}

public class Animal {

    Cat[] c;

    // inner class
    class Cat {

        Tiger[] t;

        // inner class
        class Tiger {
            private int numberOfTiger;
            private int averageOfTigerWeigth;
            private int youngTiger;


            public Tiger(int numberOfTiger, int averageOfTigerWeigth, int youngTiger) {
                super();
                this.numberOfTiger = numberOfTiger;
                this.averageOfTigerWeigth = averageOfTigerWeigth;
                this.youngTiger = youngTiger;
            }

    static class Question {

        static int getnumberOfTiger(Cat.Tiger a) {
            return 0;
        }
    }
}

【问题讨论】:

  • class Tiger { public Room(...) }??请考虑发布 real 代码,而不是某种代码。另外请格式化您的代码,以便我们不必费力地阅读它。
  • 我很抱歉。我编辑了。
  • 感谢编辑,但请您提供一些背景信息:这是某种扭曲的面试问题吗?如果有人将这样的代码带给我,我会长期将其提交给精神病患者的设施。
  • 我正要帮忙..然后我看到了代码以及它是如何格式化的......祝你好运。
  • 你能试着重写你的问题吗?我什么都不懂

标签: java inner-classes


【解决方案1】:

除了将 Cat 设为静态类或使用其实例之外,

你还需要一个用于 a.numberOfTiger 的 getter,因为它是私有的,在 Tiger 类中:

public getNumberOfTiger() {
return numberOfTiger;
}

然后:

return a.getNumberOfTiger();

【讨论】:

    【解决方案2】:

    在 getNumberOfTiger() 中,您需要返回与该对象关联的老虎的数量。您目前只返回 0,因此它总是会评估为 false。

    【讨论】:

    • 我知道,我问我如何返回 numberOfTiger。如果我在 return statrment 上写任何东西,那会出错。
    【解决方案3】:

    我看到了问题。 Tiger 类和 Cat 类必须是 static。原因是,非静态内部类可以调用其外部类(例如Cat.this.something)。非静态内部类型是这样调用的:

    instanceOfOuterClass.innerClass
    

    而静态内部类型是这样调用的:

    outerClassName.innerClass
    

    调用非静态内部类型的最简单方法是new Outer().new Inner(); Java 初学者的主要问题是他们试图这样做:

    new (new Outer()).Inner()
    

    但实际的调用方式是

    new Outer().new Inner()
    

    另外,你的方法总是返回 0 来计算老虎的数量。

    【讨论】:

      猜你喜欢
      • 2011-05-10
      • 2015-09-25
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多