黑马程序员技术交流社区
标题:
内部类的一点小疑问???
[打印本页]
作者:
蒙武辉
时间:
2012-2-10 23:22
标题:
内部类的一点小疑问???
class Demo
{
public void func()
{
}
class inner{};
public static void main(String agr[])
{
Demo d=new Demo();
new d.inner();//为啥不可以这样写呢?
}
}
作者:
Joyuang
时间:
2012-2-10 23:30
内部类创建对象应该是:Demo.inner d =new Demo().new inner();
不能写 new d.inner();
应该写d.new inner();
作者:
杜明辉
时间:
2012-2-10 23:38
在一个类中访问另一个类的内部类的成员时:
有三种情况:
1,当内部类的权限较大的情况下,直接访问内部类的成员,格式:
外部类名.内部类名 x = 外部类对象.内部类对象;
Outer.Inner i = new Outer().new Inner();
i.show();
2,当内部类有足够的权限,并静态时,访问格式:
Outer.Inner2 i = new Outer.Inner2();
i.show();
3,当内部类有足够权限,并内部类静态的同时,内部类中的成员也是静态的,访问格式:
外部类名.内部类名.成员;
Outer.Inner3.show();
作者:
侯丽星
时间:
2012-2-13 09:34
new d.inner();//为啥不可以这样写呢?个人觉得原因如下:
首先,new后面直接跟的是一个类的构造函数;
其次,因为inner是一个内部类,它不是成员方法也不是成员变量,而是成员内部类,所以不能像调用成员方法和成员变量那样(即:d.func()),有一定的特殊性。
所以只能是这样写:
new Demo()
.
new inner()
;
作者:
毛溯澜
时间:
2012-2-13 14:26
内部类创建对象应该是:Demo.inner d =new Demo().new inner();
new d.inner();//为啥不可以这样写呢?
把d用new Demo()带进去看看为:new new Demo().inner();//xxx
作者:
黄锦成
时间:
2012-2-13 18:52
d.new inner();这个更能表现出它的意思:d对象里面new一个内部类对象。这个只是语法问题。
作者:
彭泳
时间:
2012-2-13 19:07
声明必须是"类的内部类"类型, 而实例化是用外部类的实例, 来实现内部类. 也就是说, 应该声明为:
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();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2