黑马程序员技术交流社区
标题:
关于内部类中创建对象的一个小疑问
[打印本页]
作者:
王廷顺
时间:
2013-4-1 16:21
标题:
关于内部类中创建对象的一个小疑问
本帖最后由 王廷顺 于 2013-4-1 17:12 编辑
如下代码:
class Outer
{
int x = 3;
void method()
{
class Inner
{
void function()
{
System.out.println(Outer.this.x);
}
}
new Inner().function();
}
}
class InnerClassDemo3
{
public static void main(String[] args)
{
new Outer().method();
}
}
为什么”new Inner().function();“这条语句不能放在内部类Inner中,对象的创建不都是在类中才能完成吗。
作者:
赵海洋
时间:
2013-4-1 16:31
本帖最后由 赵海洋 于 2013-4-1 17:34 编辑
刚开始没有看明白你的问题,以为是报错的问题,不好意思。
对象的创建是可以在类中定义的,这个完全木有错误。但是想要创建对象总是得先把这个类定义出来吧。定义之后才可以创建对象啊,在类中创建对象的意思是在其他类中创建本类对象,然后调用本类方法。如果你在内部类里面直接创建本类对象,并调用本类方法,这就会造成报错。
作者:
胡滨
时间:
2013-4-1 17:07
楼主,你的代码只会报一个错:outer1无法解析为类型
头上那个outer没写1
加上就可以了
共同学习{:soso_e181:}
作者:
王廷顺
时间:
2013-4-1 17:11
不好意思 那个不是Outer1,而是Outer,这里边全部换成Outer或Outer1都可以,我的问题没有变,还是那个对象调用为什么不能放在Inner类中。
作者:
李红志
时间:
2013-4-1 17:14
对象的创建是在类外完成的,还没有定义类你就想创建对象?
作者:
HM马明宇
时间:
2013-4-1 17:16
第一:可以在类中创建,也可以在方法中创建,看需求 但是注意:匿名对象不可以当成成员变量来创建,即只能放在方法中来创建,一般我们创建匿名对象是为了方法调用(只调用一次,没必要给对象起名字)
第二:类中方法的调用都在方法中,不可以直接在类中直接调用(不信可以去类里面试试)
第三:内部类也是类,适用于类的规则
再看你的那句代码:new Inner().function();这句话的含义是创建一个匿名对象并进行方法调用 注意,你这里调用了方法
对比以上规则,明白为什么不能了吧?
另外:你的代码有编译错误,外部类的名字那块有问题,细心注意就行了
作者:
张玉保
时间:
2013-4-1 17:23
对象的创建是在类中完成的不错,我在这里给你举个例子吧,
class Demo
{
public void method()
{
Systen.out.println();
}
//new Demo().method()
}/*这是在一个类中定义了一个函数,
如果你在这个类中建立对象调用method()方法会怎样?
你说的关于对象都是在类中创建没错,那是其他类在访问本类时
建立本类对象调用本类函数(静态内部类的时候可以用类名调用)*/
复制代码
作者:
freeboyhrk
时间:
2013-4-1 17:38
本帖最后由 freeboyhrk 于 2013-4-1 17:53 编辑
内部类的访问规则:
1,内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this
2,外部类要访问内部类,必须建立内部类对象。
另外,本类中不可以创建本类对象。
作者:
黑马李杰
时间:
2013-4-1 17:54
类内部要调用自己的成员没必要创建对象,因为类内部有个引用this,你要是想调用fuction()函数直接用,this.function()就可以了。
作者:
王廷顺
时间:
2013-4-1 22:09
HM马明宇 发表于 2013-4-1 17:16
第一:可以在类中创建,也可以在方法中创建,看需求 但是注意:匿名对象不可以当成成员变量来创建,即只能 ...
非常感谢,你说的很到位,我明白了。
作者:
王廷顺
时间:
2013-4-1 22:10
多谢大家的指点,我懂了,{:soso_e100:}
作者:
王廷顺
时间:
2013-4-1 22:24
对版主我想说,虽然今天是4月1日,那1分你加多了;如果不减,下次发帖你不给我加也以啊!今天是被各种愚......{:soso_e101:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2