3

由于我最近开始编程,所以我有点卡在这个编码领域。

有一个名为嵌套类的编程课程。但是当我想使用它时,它实际上并没有做功课想要的。这是我需要实现的示例:

public class Zoo {
    ...
    public static class monkey {
        ...
    }
}

主要是

Zoo zoo1 = new Zoo();
...
zoo1.monkey.setage(int);
...

但是这里有一个问题,每当我想从zoo1调用monkey时,调试器说这是不可能的。(记住我想在不创建monkey实例的情况下这样做)

提前致谢

更新:我只是想知道这是否是一种语言限制,那么 oracle 本身如何使用 system.out.printf 轻松地做到这一点?

4

3 回答 3

2

您不能通过 Zoo 的实例访问猴子类,这样做实际上没有任何意义。如果你想从 main 访问猴子的静态方法,你可以使用下面的例子

public class Zoo {

    public static void main(String[] args) {
        // Example 1
        monkey.setage(3);
        // Example 2
        Zoo.monkey.setage(3);
    }

    public static class monkey {
        private static int age;

        public static void setage(int age) {
            monkey.age = age;
        }
    }
}

但是你实际上想要完成什么?

于 2013-02-28T10:50:24.760 回答
1

编辑:我没有看到您注意到“(请记住,我想在不创建猴子实例的情况下执行此操作)”

有时在询问之前,搜索可能会帮助您节省一些时间。来自此地址的直接报价: http ://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

内部类

与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段。此外,由于内部类与实例相关联,它本身不能定义任何静态成员。

作为内部类实例的对象存在于外部类的实例中。考虑以下类:

类外部类 { ... 类内部类 { ... } }

InnerClass 的实例只能存在于 OuterClass 的实例中,并且可以直接访问其封闭实例的方法和字段。下图说明了这个想法。

InnerClass 的实例存在于 OuterClass 的实例中

要实例化内部类,您必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

此外,还有两种特殊的内部类:本地类和匿名类(也称为匿名内部类)。这两个将在下一节中简要讨论。

于 2013-02-28T10:43:54.387 回答
1

monkey在我看来是静态的。但是,它们应该public代替Public

我会说这setage()不是静态方法。如果是这样,并且如果年龄是猴子的属性,那么静态地调用它是没有意义的——你会设置谁的年龄?

但问题是您似乎无法通过外部类类型的变量访问静态内部类。

所以它应该Zoo.monkey代替zoo1.monkey.

如果您只想控制范围或命名,可以使用packages

例如,您可能有以下内容:

package com.example.application.feature;

public class MyClass {
    public void f() {
        System.out.println("Hello");
    }
}

在一个名为com/example/application/feature/MyClass.java.

于 2013-02-28T10:44:47.493 回答