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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王廷顺 中级黑马   /  2013-4-1 16:21  /  2677 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王廷顺 于 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中,对象的创建不都是在类中才能完成吗。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

11 个回复

倒序浏览
本帖最后由 赵海洋 于 2013-4-1 17:34 编辑

刚开始没有看明白你的问题,以为是报错的问题,不好意思。
对象的创建是可以在类中定义的,这个完全木有错误。但是想要创建对象总是得先把这个类定义出来吧。定义之后才可以创建对象啊,在类中创建对象的意思是在其他类中创建本类对象,然后调用本类方法。如果你在内部类里面直接创建本类对象,并调用本类方法,这就会造成报错。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
楼主,你的代码只会报一个错:outer1无法解析为类型
头上那个outer没写1
加上就可以了

共同学习{:soso_e181:}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
不好意思 那个不是Outer1,而是Outer,这里边全部换成Outer或Outer1都可以,我的问题没有变,还是那个对象调用为什么不能放在Inner类中。
回复 使用道具 举报
对象的创建是在类外完成的,还没有定义类你就想创建对象?
回复 使用道具 举报
第一:可以在类中创建,也可以在方法中创建,看需求 但是注意:匿名对象不可以当成成员变量来创建,即只能放在方法中来创建,一般我们创建匿名对象是为了方法调用(只调用一次,没必要给对象起名字)
第二:类中方法的调用都在方法中,不可以直接在类中直接调用(不信可以去类里面试试)
第三:内部类也是类,适用于类的规则
再看你的那句代码:new Inner().function();这句话的含义是创建一个匿名对象并进行方法调用  注意,你这里调用了方法
对比以上规则,明白为什么不能了吧?

另外:你的代码有编译错误,外部类的名字那块有问题,细心注意就行了

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
对象的创建是在类中完成的不错,我在这里给你举个例子吧,
  1. class Demo
  2. {
  3.         public void method()
  4.         {
  5.                 Systen.out.println();
  6.         }
  7.         //new Demo().method()
  8. }/*这是在一个类中定义了一个函数,
  9.   如果你在这个类中建立对象调用method()方法会怎样?
  10.   你说的关于对象都是在类中创建没错,那是其他类在访问本类时
  11.   建立本类对象调用本类函数(静态内部类的时候可以用类名调用)*/
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 freeboyhrk 于 2013-4-1 17:53 编辑

内部类的访问规则:
1,内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this
2,外部类要访问内部类,必须建立内部类对象。
另外,本类中不可以创建本类对象。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
类内部要调用自己的成员没必要创建对象,因为类内部有个引用this,你要是想调用fuction()函数直接用,this.function()就可以了。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
HM马明宇 发表于 2013-4-1 17:16
第一:可以在类中创建,也可以在方法中创建,看需求 但是注意:匿名对象不可以当成成员变量来创建,即只能 ...

非常感谢,你说的很到位,我明白了。
回复 使用道具 举报
多谢大家的指点,我懂了,{:soso_e100:}
回复 使用道具 举报
对版主我想说,虽然今天是4月1日,那1分你加多了;如果不减,下次发帖你不给我加也以啊!今天是被各种愚......{:soso_e101:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马