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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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();//如何保存这个返回的内部类呢?
                 
       }
}

我的思路是调用一个函数获取它,毕老师在非私有情况下的几种情况分析了,但在私有情况下没说,
我今天整理笔记的时候突然想到就来询问下各位

评分

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

查看全部评分

5 个回复

倒序浏览
这个问题有意思了,我给个思路,既然是私有,那么只有这个类能够访问到,所以建议保存到这个类的对象中。
也就是提供一个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();         
                                }
}


不知道是否能行,你试试。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
{:soso_e143:}没鼓捣出来。。。还是谢谢
回复 使用道具 举报
本帖最后由 曹睿翔 于 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();
                    
        }
  }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
曹睿翔 发表于 2013-3-13 00:01
我该睡了,明天早上还有课,有疑问明天尽我能力给你回
class Outer
  {

it's very kind of you!
回复 使用道具 举报
内部类也是外部类中的一成员,成员就能被封装私有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


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

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

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



评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

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