问答详情
源自:7-6 Java 中的成员内部类

第一个图代码为啥运行不起来

package com.imooc;

import com.imooc.HelloWorld.Outer.Inner;

public class HelloWorld{
    public  class Outer{
    private    int a = 99;
    public class Inner {
        int b = 2;
        public void test() {
            System.out.println("访问外部类中的a:"+a);
            System.out.println("访问内部类中的b:"+b);
        }
        
    }
    

     public static void main (String[] args){
    Outer o = new Outer();
    Inner i = o.new Inner();
    i.test();
}
    }
}
   

提问者:qq_慕侠9518479 2019-07-22 14:09

个回答

  • 慕移动2735134
    2019-07-24 18:14:46
    已采纳

    多层嵌套内部类这样的,可以这样写

    //外部类HelloWorld
    public class HelloWorld{
        
        //外部类的私有属性name
        private String name = "imooc";
        
        //外部类的成员属性
        int age = 20;
        //成员内部类Outer
        public class Outer {
            //Outer类的成员属性
            String name="第二遍我爱慕课!";
            //成员内部类Inner
            public class Inner {
                String name = "爱慕课";
                //内部类中的方法
                public void show() { 
                    System.out.println("HelloWorld外部类中的name:" + HelloWorld.this.name );
                    System.out.println("Outer外部类中的name:" +  Outer.this.name );
                    System.out.println("内部类中的name:" +   this.name );
                    System.out.println("外部类中的age:" + age);
                }
            }
         }
        
        
        //测试成员内部类
        public static void main(String[] args) {
            
            //创建外部类的对象
            HelloWorld o = new HelloWorld (); 
            
            //创建内部类的对象
            Outer out = o.new Outer();
            Outer.Inner inn = out.new Inner();//此处直接写Inner类型是报错的,因为Inner类还在Outer类的内部
            //调用内部类对象的show方法
            inn.show();
        }
    }


  • 慕移动2735134
    2019-07-24 18:03:02

    你这里有三个类

    HelloWorld类   包含 Outer类  包含  Inner类

    是顺序关系,你的类嵌套三层

    要在HelloWorld类里去调用最里层的Inner类的方法

    先实例化HelloWorld类,再实例化Outer类,再实例化Inner类


  • 慕移动0851642
    2019-07-22 23:49:03

    package com.imooc;
    
    import com.imooc.HelloWorld.Outer.Inner;
    
    public class HelloWorld{
        public  class Outer{              //注意在这里修改成public static class Outer{
        private    int a = 99;
        public class Inner {
            int b = 2;
            public void test() {
                System.out.println("访问外部类中的a:"+a);
                System.out.println("访问内部类中的b:"+b);
            }
            
        }
        
    
         public static void main (String[] args){
        Outer o = new Outer();                      //或者这里改成Outer o = new HelloWorld().new Outer();
        Inner i = o.new Inner();
        i.test();
    }
        }
    }
    
    内部类中存在静态成员,需要修改成静态内部类(静态内部类相当于一个外部类)


  • Pikachu2016
    2019-07-22 17:38:59

    改成这样可行

    //外部类

    public class HelloWorld{

        private   int a = 99;

        public class Inner {

            int b = 2;

            public void test() {

                System.out.println("访问外部类中的a:"+HelloWorld.this.a);

                System.out.println("访问内部类中的b:"+b);

            }

           }

         public static void main (String[] args){

        HelloWorld o = new HelloWorld();

        Inner i = o.new Inner();

        i.test();

    }


    }


  • FindYouL
    2019-07-22 17:29:06

    HelloWorld是外部类,其他的是内部类,外部类没有实例化,