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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Outer
{
        int x = 3;

        void method(final int a)
        {
                final int y = a;
                //y=a;
                class Inner
                {
                        void function()
                        {
                                System.out.println(y);
                        }
                }
       
                new Inner().function();
                System.out.println("y="+y);
                System.out.println("x="+x);
               
        }
       
}


class  InnerClassDemo3
{
        public static void main(String[] args)
        {
                Outer out = new Outer();
                out.method(7);
                out.method(8);
                Outer.Inner in=new Outer().new Inner();
                in.function();
}

总是报错

Demo2.java:35: 错误: 找不到符号
        Outer.Inner in=new Outer().new Inner();
             ^
  符号:   类 Inner
  位置: 类 Outer
Demo2.java:35: 错误: 找不到符号
        Outer.Inner in=new Outer().new Inner();
                                       ^
  符号:   类 Inner
  位置: 类 Outer
2 个错误


是确实不能在其他类中创建,只能在它所在的类中被创建引用。还是我用的创建方法不对。
求交流

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
  1. package test;

  2. public class OuterTest {
  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 Outer out = new Outer();
  6.         out.method(7);
  7.         out.method(8);
  8.        // Outer.Inner in=new Outer().new Inner();
  9.         Outer.Inner2 in=new Outer().new Inner2();
  10.         in.function();
  11.         }

  12. }

  13. class Outer
  14. {
  15.         int x = 3;

  16.         void method(final int a)
  17.         {
  18.                 final int y = a;
  19.                 //y=a;
  20.                 class Inner
  21.                 {
  22.                         void function()
  23.                         {
  24.                                 System.out.println(y);
  25.                         }
  26.                 }
  27.         
  28.                 new Inner().function();
  29.                 System.out.println("y="+y);
  30.                 System.out.println("x="+x);
  31.                
  32.         }
  33.         
  34.         public class Inner2
  35.         {
  36.                 void function()
  37.                 {
  38.                         System.out.println(x);
  39.                 }
  40.         }
  41.         
  42. }
复制代码

你那是定义在方法里面了。
把内部类放到方法外面就可以了。看上面的inner2

评分

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

查看全部评分

回复 使用道具 举报
内部类定义在外部类乘员位置上的时候才可以调用 Outer.Inner in=new Outer().new Inner();创建新的新的对象
定义在局部是不可以用Outer.Inner in=new Outer().new Inner();创建
可改为:
  1. {
  2.         int x = 3;
  3.         int y = 4;
  4.         class Inner
  5.         {
  6.                 void function()
  7.                 {
  8.                         System.out.println(y);
  9.                 }
  10.         }
  11.         void method(final int a)
  12.         {
  13.                 final int y = a;
  14.                
  15.                
  16.         
  17.                 new Inner().function();
  18.                 System.out.println("y="+y);
  19.                 System.out.println("x="+x);
  20.                
  21.         }
  22.         
  23. }
复制代码

或者不用Outer.Inner in=new Outer().new Inner();创建对象就行了,不知道是不是你想要的答案

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马