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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Test8 {
        //外部类成员
        private String name="aaa";
        private void outName(){
                System.out.println(name);
        }
        //内部类
        public  class Test{
                //内部类成员
                private int id=100;
               
                private  void outId(){
                        System.out.println(id);
                        Test8 test8 = new Test8();
                        test8.outName();
                       
                        System.out.println(Test8.this.name);
                }
               
               
        }
       
        public static void main(String[] args){
                Test test = new Test();
                test.outId();
        }
        }
这样做为什么不行啊!!纳闷

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 Jiewin 于 2013-8-8 05:01 编辑

当内部类定义在外部类成员位置上并且被私有化时,成员方法必须通过(new 外部类对象.new 内部类对象)的方法来调用内部类私有方法,所以你的主函数里应该这样创建对象:
Test8.Test test = new Test8().new Test();

或者直接new Test8().new Test().outId();


以后提问的代码都放在代码区,看着比较明了

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
直接访问
回复 使用道具 举报
额~~搞定了~~是因为静态方法只能调用静态方法
在外部类里面在定义一个公开方法然后调用内部类的方法
然后MAIN方法调用这个公开方法就好了
回复 使用道具 举报
茶念小手 发表于 2013-8-8 12:17
额~~搞定了~~是因为静态方法只能调用静态方法
在外部类里面在定义一个公开方法然后调用内部类的方法
然后MA ...

楼主,你的回答让我好凌乱。。。看不懂- -
回复 使用道具 举报
像这样
  1. public class Test8 {
  2.         //外部类成员
  3.         private String name="aaa";
  4.         private void outName(){
  5.                 System.out.println(name);
  6.         }
  7.         //内部类
  8.         public  class Test{
  9.                 //内部类成员
  10.                 private int id=100;
  11.                
  12.                 private  void outId(){
  13.                         System.out.println(id);
  14.                         Test8 test8 = new Test8();
  15.                         test8.outName();
  16.                        
  17.                         System.out.println(Test8.this.name);
  18.                 }
  19.                
  20.                
  21.         }
  22.         //实例化内部类
  23.         private  void aaa() {
  24.                 Test test = new Test();
  25.                 test.outId();
  26.                
  27.         }
  28.         public static void main(String[] args){
  29.                 Test8  test8 = new Test8();
  30.                 test8.aaa();
  31.         }

  32.        

  33. }
复制代码
回复 使用道具 举报
像这样
  1. public class Test8 {
  2.         //外部类成员
  3.         private String name="aaa";
  4.         private void outName(){
  5.                 System.out.println(name);
  6.         }
  7.         //内部类
  8.         public  class Test{
  9.                 //内部类成员
  10.                 private int id=100;
  11.                
  12.                 private  void outId(){
  13.                         System.out.println(id);
  14.                         Test8 test8 = new Test8();
  15.                         test8.outName();
  16.                        
  17.                         System.out.println(Test8.this.name);
  18.                 }
  19.                
  20.                
  21.         }
  22.         //实例化内部类
  23.         private  void aaa() {
  24.                 Test test = new Test();
  25.                 test.outId();
  26.                
  27.         }
  28.         public static void main(String[] args){
  29.                 Test8  test8 = new Test8();
  30.                 test8.aaa();
  31.         }

  32.        

  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
public class Test8 {
    //外部类成员
    private String name="aaa";
    private void outName(){
            System.out.println(name);
    }
    //内部类
    public  class Test{
            //内部类成员
            private int id=100;
            
            private  void outId(){
                    System.out.println(id);
                    Test8 test8 = new Test8();
                    test8.outName();
                    
                    System.out.println(Test8.this.name);
            }         
            
    }
   
    public static void main(String[] args){
            //Test test = new Test();  不能直接访问内部类,需要通过 建立内部类对象访问哦

               Test8.Test    test =(new Test8()).new Test();   //new Test8()  的意思是:建立内部类,需要先创建外部类
     //          -----------                --------------------          ------   
     //  声明内部类对象类型       外部类对象              内部类初始化

            test.outId();
    }
    }

输出结果:
    100
    aaa
    aaa



有图有真相:

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

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