黑马程序员技术交流社区
标题:
关于static
[打印本页]
作者:
黑夜里的白猫
时间:
2013-5-28 10:14
标题:
关于static
本帖最后由 黑夜里的白猫 于 2013-5-30 09:36 编辑
interface Inter
{
void method();
}
class Test
{
class Inner implements Inter//为什么这个类要定义static ,不定义会报错
{
public void method()
{
System.out.println("method run");
}
}
static Inter function()
{
return new Inner();
}
}
class InnerClassTest
{
public static void main(String[] args)
{
Test.function().method();
}
}
作者:
王永贺
时间:
2013-5-28 10:33
因为你的function()方法是静态的,但是你调用的是一个非静态类的构造方法,所有就是非静态方法。而静态方法只能用来调用静态函数和变量的 所以会报错的。
作者:
无妄无涯
时间:
2013-5-28 10:36
你定义的function()方法是静态的,如果类本身不是静态的话,情况就会变成类中的方法要先于类加载,这显然不可能,所以会报错。
作者:
lpflpy
时间:
2013-5-28 10:48
因为你的function()方 法是静态的,是随着类的加载而加载的, 所以访问非静态的内部类对象,必须是new Outer().new Inner();
class Inner implements Inter//为什么这个类要定义static ,不定义会报错
{
public void method()
{
System.out.println("method run");
}
}
static Inter function()
{
return new Test().new Inner();//看此处
}
}
复制代码
如果你的内部类是也是静态的,那么方法与内部类就是同一个等级了,就可以直接new Inner();
static class Inner implements Inter//为什么这个类要定义static ,不定义会报错
{
public void method()
{
System.out.println("method run");
}
}
static Inter function()
{
return /*new Test().*/new Inner();//看此处
}
}
复制代码
作者:
小石头39910
时间:
2013-5-28 10:51
static Inter function()//function方法是静态的,内部类规定,只要内部类中定义了静态成员,那么这个内部类必须是静态的
{
return new Inner();
}
作者:
王瀛
时间:
2013-5-28 12:23
interface Inter
{
void method();
}
class Test
{
static class Inner implements Inter//为什么这个类要定义static ,不定义会报错
{
public void method()
{
System.out.println("method run");
}
}
static Inter function()//静态方法
{
return new Inner();//静态方法中调用了Inner(),所以Inner必须被static修饰
}
}
class InnerClassTest01
{
public static void main(String[] args)
{
Test.function().method();
}
}
复制代码
解释在注释中,看一下吧
作者:
黑夜里的白猫
时间:
2013-5-30 09:36
小石头39910 发表于 2013-5-28 10:51
static Inter function()//function方法是静态的,内部类规定,只要内部类中定义了静态成员,那么这个 ...
明白了。谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2