Java 返回内部类的静态方法
我真的不明白为什么下面的getMyClass2方法不能是静态的,为什么它不是有效的Java代码Java 返回内部类的静态方法,java,static-methods,inner-classes,Java,Static Methods,Inner Classes,我真的不明白为什么下面的getMyClass2方法不能是静态的,为什么它不是有效的Java代码 public class MyClass { private class MyClass2 { public String s1 = ""; public String s2 = ""; } private MyClass2 myClass2; private static MyClass2 getMyClass2()
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();
}
}
必须说内部类是静态的,因为非静态类绑定到实例,所以不能从静态方法返回
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();
}
}
(非静态)内部类实例始终与它们所包含的类的实例相关联。静态方法将在不引用MyClass的特定实例的情况下被调用,因此,如果它创建了MyClass2的实例,则不会有MyClass的实例与之关联。是
因为99%的时候你不希望它们是静态的;D
静态“嵌套”类只不过是在另一个类内部定义的“顶级”类。如果上面示例中的静态类MyClass2是公共的,您可以简单地说new MyClass.MyClass2();对于一个普通的“内部类”,你必须对一个对象,而不是类MyClass说:MyClass some=new MyClass(),然后是new some.MyClass2()(我忘记了确切的语法)
“关于”它们并不总是与实例相关联,只有当它们不是静态的时才与实例相关联。谢谢,在我的文本中阐明了这一点。@Gaim:内部类从来都不是静态的。它们被称为嵌套类。@BalusC Okey,我很抱歉术语不好。谢谢大家,尽管我知道OP所问的问题的答案,但我还是从这个问题中学到了:)内部类在默认情况下不是静态的有什么原因吗?@AOO我认为它们实际上没有多大用处