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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒙武辉 黑马帝   /  2012-2-10 23:22  /  1885 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo
{
        public void func()
        {
               
        }
       class inner{};
       public static void main(String agr[])
       {
                               Demo d=new Demo();
                new d.inner();//为啥不可以这样写呢?
       }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1 问题解决了?

查看全部评分

6 个回复

倒序浏览
内部类创建对象应该是:Demo.inner d =new Demo().new inner();
不能写 new d.inner();
应该写d.new inner();

评分

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

查看全部评分

回复 使用道具 举报
在一个类中访问另一个类的内部类的成员时:
                有三种情况:
                1,当内部类的权限较大的情况下,直接访问内部类的成员,格式:
                外部类名.内部类名 x = 外部类对象.内部类对象;
                Outer.Inner i = new Outer().new Inner();
                i.show();

                2,当内部类有足够的权限,并静态时,访问格式:
                Outer.Inner2 i = new Outer.Inner2();
                i.show();

3,当内部类有足够权限,并内部类静态的同时,内部类中的成员也是静态的,访问格式:
                外部类名.内部类名.成员;
                Outer.Inner3.show();

评分

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

查看全部评分

回复 使用道具 举报
new d.inner();//为啥不可以这样写呢?个人觉得原因如下:
首先,new后面直接跟的是一个类的构造函数;
其次,因为inner是一个内部类,它不是成员方法也不是成员变量,而是成员内部类,所以不能像调用成员方法和成员变量那样(即:d.func()),有一定的特殊性。
所以只能是这样写:new Demo().new inner();

评分

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

查看全部评分

回复 使用道具 举报
内部类创建对象应该是:Demo.inner d =new Demo().new inner();
new d.inner();//为啥不可以这样写呢?
把d用new Demo()带进去看看为:new new Demo().inner();//xxx
回复 使用道具 举报
d.new inner();这个更能表现出它的意思:d对象里面new一个内部类对象。这个只是语法问题。
回复 使用道具 举报
彭泳 中级黑马 2012-2-13 19:07:32
7#
声明必须是"类的内部类"类型, 而实例化是用外部类的实例, 来实现内部类. 也就是说, 应该声明为:
Outer.Inner inner=outer.new Inner();
在其他类中创建内部类的对象时,必须要使用外部类的实例来创建。比如类B是类A的内部类,则语句A.B=new A.B()将是错误的。正确的方法是先创建一个类A的对象,比如A ma=new ma();然后再用这个对象来创建内部类的实例,比如A.B mab=ma.new B();这里要注意后面的语法ma.new B()。也可以把这两步合为一步,比如A.B mab=new A().new B();注意,这里使用了两个new运算符,如果只有一个将是错误的,比如A.B mab=new A().B();是错误的,new A().B()语句JAVA会理解为创建一个无名的引用,然后由这个引用调用类A中的B()函数。如果需要调用的构造函数不是默认的,则可以这样创建比如A.B mab=new A(2).new B();或者分为两步A ma=new A(2); A.B mab=ma.new B();

评分

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

查看全部评分

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