A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yogaa 中级黑马   /  2014-4-22 20:41  /  1459 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

无法通过啊,运行报错!
代码如下:
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就报错啊?求大神解释~

评分

参与人数 1技术分 +1 收起 理由
Silent_memory + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Silent_memory + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先你定义的内部类是非静态的成员内部类,所以在使用时必须是通过对象来访问,或者你把成员内部类的定义成静态通过类名访问也可以,假如我使用前者则代码如下
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();
              }
        }
回复 使用道具 举报
总结一下:
内部类定义在成员位置上,就是成员内部类.成员内部类可以被成员修饰符修饰!比如:public ,static,private等
如果成员内部类的方法被static修饰,那么成员内部类也要被static修饰
内部类定义在局部,也就是在方法中,就称之为局部内部类,!如果局部内部类想访问方法中的局部变量,这个局部变量
必须是被final修饰的,.
回复 使用道具 举报
通过类明直接调用的话需要类中的成员是静态的 就是说如果按你的  Outer.Inner inner = new Outer.Inner();这种方法调用 需要Inner类是静态的也就是需要static 修饰
回复 使用道具 举报
路过学习学习~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马