黑马程序员技术交流社区

标题: 请问外部类该如何访问内部类的私有方法!! [打印本页]

作者: 茶念小手    时间: 2013-8-8 02:21
标题: 请问外部类该如何访问内部类的私有方法!!
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();
        }
        }
这样做为什么不行啊!!纳闷
作者: 吴光新    时间: 2013-8-8 04:55
本帖最后由 Jiewin 于 2013-8-8 05:01 编辑

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

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


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

作者: sunhaoz    时间: 2013-8-8 07:41
直接访问
作者: 茶念小手    时间: 2013-8-8 12:17
额~~搞定了~~是因为静态方法只能调用静态方法
在外部类里面在定义一个公开方法然后调用内部类的方法
然后MAIN方法调用这个公开方法就好了
作者: breaveheart    时间: 2013-8-8 18:04
茶念小手 发表于 2013-8-8 12:17
额~~搞定了~~是因为静态方法只能调用静态方法
在外部类里面在定义一个公开方法然后调用内部类的方法
然后MA ...

楼主,你的回答让我好凌乱。。。看不懂- -
作者: 茶念小手    时间: 2013-8-8 23:58
像这样
  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. }
复制代码

作者: 茶念小手    时间: 2013-8-8 23:59
像这样
  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. }
复制代码

作者: 布易般    时间: 2013-8-9 13:17
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



有图有真相:






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