我真的不明白为什么下面的getMyClass2方法不能是静态的,为什么它不是有效的Java代码?
public class MyClass
{
private class MyClass2
{
public String s1 = "";
public String s2 = "";
}
private MyClass2 myClass2;
private static MyClass2 getMyClass2()
{
MyClass2 myClass2 = new MyClass2();
return myClass2;
}
public MyClass()
{
myClass2 = getMyClass2();
}
}
答案 0 :(得分:13)
你必须说内部类是静态的,因为非静态绑定到实例,所以它不能从静态方法返回
public class MyClass
{
private static class MyClass2
{
public String s1 = "";
public String s2 = "";
}
private MyClass2 myClass2;
private static MyClass2 getMyClass2()
{
MyClass2 myClass2 = new MyClass2();
return myClass2;
}
public MyClass()
{
myClass2 = getMyClass2();
}
}
答案 1 :(得分:2)
(非静态)内部类实例始终与它们所包含的类的实例相关联。静态方法将在不引用MyClass的特定实例的情况下被调用,因此如果它创建了MyClass2的实例,则不会有MyClass的实例与之关联。
答案 2 :(得分:0)
是,
因为99%的时间你不希望它们是静态的; D
静态“嵌套”类只不过是在另一个类中定义的“顶级”类。如果上面例子中的静态类MyClass2是公共的,你可以说新的MyClass.MyClass2();在普通的“内部类”的情况下,你会想到一个对象,而不是MyClass类:MyClass some = new MyClass()然后像new some.MyClass2()(我忘记了确切的语法)。
此致