黑马程序员技术交流社区

标题: 关于内部类的问题 [打印本页]

作者: 康大玮    时间: 2012-5-23 12:24
标题: 关于内部类的问题
毕老师的java基础课程中day09的第2段视频中说道:
在外部类其他类中,如何直接访问static内部类的非静态成员呢?
         new Outer.Inner().function();

         在外部类其他类中,如何直接访问static内部类的静态成员呢?
         Outer.Inner().function();
但是我测试的结果怎么不一样?
作者: 康大玮    时间: 2012-5-23 12:26
附上代码:
class Outer
{
  private static int x = 3;

  static class Inner//内部类
  {
      static void function()
     {
       System.out.println("inner :"+x);
     }
  }
}

class InnerDemo
{
   public static void main(String[] args)
   {   
     /*
       在外部类其他类中,如何直接访问static内部类的静态成员呢?
         Outer.Inner().function();
    */
        new Outer.Inner().function();   //但是我测试的时候用  Outer.Inner().function();  会报错 而用 new Outer.Inner().function(); 却正确 不知道那错了?
   }
}
作者: 高铭    时间: 2012-5-23 12:31
new Outer.Inner().function();     改为Outer.Inner.function();  既然是静态的成员,不new对象,就直接用类名.方法名
Inner.function(); 不知道这样可以不...前面加上Outer.
作者: 冯越    时间: 2012-5-23 12:33
本帖最后由 冯越 于 2012-5-23 12:40 编辑

class Outer
{
  private static int x = 3;

  static class Inner//内部类
  {
      static void function()
     {
       System.out.println("inner :"+x);
     }
  }
}

class InnerDemo
{
   public static void main(String[] args)
   {   
     /*
       在外部类其他类中,如何直接访问static内部类的静态成员呢?
         Outer.Inner().function();   //把()去了 你这样写什么都不是  Outer.Inner.function() 就对了
    */
        new Outer.Inner().function();   //这里错了 应该是  Outer.Inner.function() Inner是静态类 你为什么要在后面加()呢?你这样的写法表示的是先创建一个内部静态类的对象然后通过这个对象调用function()方法 但你的function方法是静态的所以不需要创建这个内部静态类的对象
   }
}
作者: 杨康    时间: 2012-5-23 13:29
你木有发现你外部其他类使用内部类中静态成员多了个括号吗?

       在外部类其他类中,如何直接访问static内部类的静态成员呢?
         Outer.Inner().function();

把Inner()的括号去掉就对了。
作者: 康大玮    时间: 2012-5-23 13:38
冯越 发表于 2012-5-23 12:33
class Outer
{
  private static int x = 3;

谢谢,是这样的!自己太粗心了,呵呵,我新手!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2