黑马程序员技术交流社区

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

作者: yogaa    时间: 2014-4-22 20:41
标题: 关于一个内部类的问题~
无法通过啊,运行报错!
代码如下:
1     public class Outer{
2        public void someOuterMethod(){
3             new Outer.Inner();                  
4        }
5          public class Inner{
6               public void InnerMethod(){
7                   System.out.println("im InnerMethod");
8               }
9          }
10         public static void main(String[] args){
11            Outer.Inner inner = new Outer.Inner();
12             inner.InnerMethod();
              }
        }
为什么第三行new可以,第11行new就报错啊?求大神解释~


作者: 谢振宣    时间: 2014-4-22 21:22
  1. public class  Outer
  2. {
  3.         public  void someOuterMethod()//此方法是非静态的,既可以访问静态,也可以访问非静态
  4.         {
  5.                 new Outer.Inner();
  6.         }
  7.         public static class Inner//由于主函数是静态的,静态只能访问静态,此处的内部类要定义为static
  8.         {
  9.                 public void InnerMethod()
  10.                 {
  11.                         System.out.println("is InnerMethod");
  12.                 }
  13.         }
  14.         public static void main(String[] args)
  15.         {
  16.                 Outer.Inner inner = new Outer.Inner();
  17.                 inner.InnerMethod();
  18.         }
  19. }
复制代码

作者: 晴天_SH    时间: 2014-4-23 14:31
首先你定义的内部类是非静态的成员内部类,所以在使用时必须是通过对象来访问,或者你把成员内部类的定义成静态通过类名访问也可以,假如我使用前者则代码如下
public class Outer
{
        public void someOuterMethod(){
           new Inner();                        }
         public class Inner{
              public void InnerMethod(){
                 System.out.println("im InnerMethod");
              }
         }
        public static void main(String[] args){
            Outer.Inner inner = new Outer().new Inner();
             inner.InnerMethod();
              }
        }
作者: 悠然丶    时间: 2014-4-23 16:39
总结一下:
内部类定义在成员位置上,就是成员内部类.成员内部类可以被成员修饰符修饰!比如:public ,static,private等
如果成员内部类的方法被static修饰,那么成员内部类也要被static修饰
内部类定义在局部,也就是在方法中,就称之为局部内部类,!如果局部内部类想访问方法中的局部变量,这个局部变量
必须是被final修饰的,.
作者: 微笑=.一瞬间    时间: 2014-4-25 21:02
通过类明直接调用的话需要类中的成员是静态的 就是说如果按你的  Outer.Inner inner = new Outer.Inner();这种方法调用 需要Inner类是静态的也就是需要static 修饰
作者: 酱油炒饭    时间: 2014-4-26 00:06
路过学习学习~




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