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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-5-12 17:48  /  1930 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo
  2. {       
  3.         public void func()
  4.         {
  5.                  
  6.                 new Inner();  
  7.                
  8.         }
  9.         class Inner{}
  10.         public static void main(String[] args)
  11.         {
  12.                 Demo d=new Demo();
  13.                  new d.Inner();
  14.         }
  15. }
复制代码
这段代码中为什么 new d.Inner(); 是错误的,正确的建立内部类的方式应该怎么写

评分

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

查看全部评分

10 个回复

倒序浏览
我来分析一下吧:
new d.Inner();
d是个对象,而Inner是个类
你肯定不能说某个类是属于某一个对象的,只能说某个对象是某个某个类的
再打个比方说说吧:
你是一个对象吧,你有一个宠物,它也是一个对象吧,那么你就不能说你有一个宠物类,或者说你的那个宠物是属于人类的。是不是?
正确的方式:
                Demo.Inner ii=d.new Inner();
表示的就是某个对象的对象(相当于你的宠物,,连个对象吧), 所以创建一个宠物(内部类)对象时,就要实例化两个对象,一个是宠物的主人,一个是宠物,

不知道我说的够不够明白


评分

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

查看全部评分

回复 使用道具 举报
毕老师的标准格式:
外部类名.内部类名 变量名= 外部对象.内部对象
Out.Inner  x= new Out().new Inner();

评分

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

查看全部评分

回复 使用道具 举报
class Demo
{        
        public void func()
        {
                 
                new Inner();  
               
        }
        class Inner{}
        public static void main(String[] args)
        {
                Demo d=new Demo();
               //  new d.Inner();
                           Demo.Inner in=d.new Inner();
                          
        }
}
回复 使用道具 举报
class Demo

{        
        public void func()

        {

                 

                new Inner();  

               
        }

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

        {

                Demo d=new Demo();  //这里要创建内部类对象,可以使用Demo.Inner d=new Demo().new Inner();

                 new d.Inner();

        }

}

评分

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

查看全部评分

回复 使用道具 举报
1、内部类可以直接访问外部类中的成员,包括私有;
2、外部类要访问内部类必须建立内部类对象。
  1. class Demo
  2. {        
  3.         public void func()
  4.         {
  5.                  
  6.                 new Inner();  
  7.                
  8.         }
  9.         static class Inner{} //此内部类必须是静态的!
  10.         public static void main(String[] args)
  11.         {
  12.                // Demo d=new Demo();  //可以省略
  13.                  new Demo.Inner();  //new Inner();//也能编译通过!!
  14.         }
  15. }
复制代码
回复 使用道具 举报
    成员内部类可以访问外部类的静态与非静态的方法与成员变量。生成成员内部类对象的方式为: :OuterClass.InnerClass inner = new OuterClass().new InnerClass();
     静态内部类:只能访问外部类的静态成员变量与静态方法,生成静态内部类对象的方式为:  例如  :OuterClass.InnerClass inner = new OuterClass.InnerClass();
     局部内部类:定义在方法当中,只能访问方法中声明的final 类型的变量。生成成员内部类对象的方式是  先new出外部类的对象然后在调用内部类所在外部类的那个方法;

评分

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

查看全部评分

回复 使用道具 举报
林康 发表于 2012-5-12 18:33
哥们,只是基础教程第几天的课程.
能帮忙找找么,我好像漏了这一段,一点印象都没有了0.0 ...

黑马程序员毕向东Java基础视频教程-day09-01-面向对象(内部类访问规则)
黑马程序员毕向东Java基础视频教程-day09-02-面向对象(静态内部类)
黑马程序员毕向东Java基础视频教程-day09-03-面向对象(内部类定义原则)
黑马程序员毕向东Java基础视频教程-day09-04-面向对象(匿名内部类)
哦了
回复 使用道具 举报
林康 发表于 2012-5-12 18:33
哥们,只是基础教程第几天的课程.
能帮忙找找么,我好像漏了这一段,一点印象都没有了0.0 ...

黑马程序员毕向东Java基础视频教程-day09-01-面向对象(内部类访问规则)
黑马程序员毕向东Java基础视频教程-day09-02-面向对象(静态内部类)
黑马程序员毕向东Java基础视频教程-day09-03-面向对象(内部类定义原则)
黑马程序员毕向东Java基础视频教程-day09-04-面向对象(匿名内部类)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马