黑马程序员技术交流社区
标题: static引起的错误,为什么 [打印本页]
作者: cehkongfu 时间: 2012-10-12 23:20
标题: static引起的错误,为什么
class Outer
{
private static int x = 3;
class Inner
{
void function()
{
System.out.println("inner :"+x);
}
}
}
class InnerClassDemo2
{
public static void main(String[] args)
{
Outer.Inner in = new Outer().new Inner();
in.function();
}
输出结果 inner: 3
================================================
class Outer
{
private static int x = 3;
static class Inner
{
static void function()
{
System.out.println("innner :"+x);
}
}
}
class InnerClassDemo2
{
public static void main(String[] args)
{
Outer.Inner in = new Outer().new Inner();
in.function();
}
}
这段程序就报错了, 仅仅就多了一个static 为什么呢?
作者: 范泰洋 时间: 2012-10-12 23:39
.内部类可以直接访问外部类的成员,包括私有成员。
内部类之所以可以直接访问外部类中的成员。是因为内部类中持有一个外部类的的引用,格式 外部类名.this
然而静态方法中不可能有this和super关键字,所以不可以!
作者: 唐增友 时间: 2012-10-12 23:53
static 可以修饰 类名么?
作者: 李润根 时间: 2012-10-13 00:07
本帖最后由 我是菜鸟 于 2012-10-13 00:15 编辑
public class A
{
public static class B
{
public void fun()
{
System.out.println("OK");
}
}
public class C
{
public void fun()
{
System.out.println("OK");
}
}
public static void main(String[] args)
{
A a = new A();
A.B ab = new A.B();//静态内部类(方法),访问格式:外部类.内部类()
A.C b = a.new C();//成功
A.C c = new A().new C();//成功
}
}
作者: 徐梦侠 时间: 2012-10-13 00:32
static可以修饰类成员位置上的内部类,但是这是内部类只能访问外部类中的static成员。这里要访问function,可以直接用类名调用Outer.Inner.function();静态成员是随类的,与对象无关的,若想创建静态内部类对象,可以Outer.Inner in = new Outer.Inner();即不能用外部类的对象来调用静态内部类的构造方法。
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |