黑马程序员技术交流社区

标题: 请教:当内部类被私有化后,我该如何访问他的方法呢? [打印本页]

作者: HM朱蛟    时间: 2013-3-12 23:10
标题: 请教:当内部类被私有化后,我该如何访问他的方法呢?
class Outer
{

                                private class Inner1
                                {       
                                        void show()
                                        {
                                           System.out.println("成员_inner");          
                                  }
                                }
               
                    public Inner1 getInner1()
                    {
                            return new Inner1();         
                                }
}


class Run
{
    public static void main(String[] args)
       {               

                  Outer o = new Outer();
                                   o.getInner1();//如何保存这个返回的内部类呢?
                 
       }
}

我的思路是调用一个函数获取它,毕老师在非私有情况下的几种情况分析了,但在私有情况下没说,
我今天整理笔记的时候突然想到就来询问下各位
作者: mingning179    时间: 2013-3-12 23:21
这个问题有意思了,我给个思路,既然是私有,那么只有这个类能够访问到,所以建议保存到这个类的对象中。
也就是提供一个set方法。

class Outer
{
Inner1 inner=null;
public void setInner(Inner1 inner)
{
     this.inner=inner;
}
                                private class Inner1
                                {        
                                        void show()
                                        {
                                           System.out.println("成员_inner");         
                                  }
                                }
               
                    public Inner1 getInner1()
                    {
                            return new Inner1();         
                                }
}


不知道是否能行,你试试。
作者: HM朱蛟    时间: 2013-3-12 23:42
{:soso_e143:}没鼓捣出来。。。还是谢谢
作者: 曹睿翔    时间: 2013-3-13 00:01
本帖最后由 曹睿翔 于 2013-3-13 00:03 编辑

我该睡了,明天早上还有课,有疑问明天尽我能力给你回
class Outer
  {
   private class Inner1
            {   
         Inner1(){
             show();
              }
   
    void show()
                     {
                      System.out.println("成员_inner");         
                     }
           }
   Outer.Inner1 inn = new Outer.Inner1();//这个是成员变量,先加载了,不调用下边的o.getInner1();就会调用show()方法
  
     public Inner1 getInner1()
      {
          return new Outer.Inner1();   
   }
  }
  
class Demo
  {
      public static void main(String[] args)
        {               
                   Outer o = new Outer();
                    // o.getInner1();
                    
        }
  }

作者: HM朱蛟    时间: 2013-3-13 01:45
曹睿翔 发表于 2013-3-13 00:01
我该睡了,明天早上还有课,有疑问明天尽我能力给你回
class Outer
  {

it's very kind of you!
作者: 聂斌    时间: 2013-3-13 02:24
内部类也是外部类中的一成员,成员就能被封装私有private class Inner,有可能把内部类封装,用私有修饰,,

对象的封装:
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。在我们使用对象时我们没有必要知道对象的内部是如何进行完成功能操作的,我们只要指挥对象去做,我们只要知道结果就可以了

内部类的访问规则:
1,内部类可以直接访问外部类中的成员,包括私有。
        之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this
2,外部类要访问内部类,必须建立内部类对象。

那么怎么访问私有内部类里面的方法呢,,直接上代码

public class Outer {

    private class Inner1            //将内部类在外部类中进行封装。外界就不知道了
    {        
            void show()
            {
               System.out.println("成员_inner");         
            }
    }


    public void method()           //提供一个公有的方法给外界,,那么外界就可以访问这个 method()  
        {
                Inner1 in = new Inner1();         //外部类要访问内部类,必须得建立内部类对象。,,,当然了这里也可以写 new Inner1().show();简化书写,,,,
                in.show();
        }



        public static void main(String[] args)
    {
                Outer d=new  Outer ();
                d.method();
               
    }

}

输出:
成员_inner


还有一些我自己对内部类的总结:

内部类一般不会被共有修饰的,,一般是私有....

当一个类需要直接访问到另外一个类中成员的时候,就把这个类写到那个类的里面去,写完后把这个内部类封装在这个类中不对外公布,而对外提供方法来访问这个内部类,








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