黑马程序员技术交流社区

标题: 内部类 [打印本页]

作者: 黑马王晓明    时间: 2013-8-10 20:27
标题: 内部类
本帖最后由 黑马王晓明 于 2013-8-11 00:47 编辑

创建一个包含实例内部类的类 这句话怎么理解 最好能举例说明
class Outer{
        class Inner{}
}

这样写是否满足了这句话的要求?

作者: yan    时间: 2013-8-10 22:08
成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
      要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的。
      在成员内部类要引用外部类对象时,使用outer.this来表示外部类对象;
      而需要创建内部类对象,可以使用outer.inner  obj = outerobj.new inner();
public class Outer {
    public static void main(String[] args) {
        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        inner.print("Outer.new");

        inner = outer.getInner();
        inner.print("Outer.get");
    }

    // 个人推荐使用getxxx()来获取成员内部类,尤其是该内部类的构造函数无参数时
    public Inner getInner() {
        return new Inner();
    }

    public class Inner {
        public void print(String str) {
            System.out.println(str);
        }
    }
}

内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同。
作者: 布易般    时间: 2013-8-10 23:31
本帖最后由 布易般 于 2013-8-11 00:33 编辑

问题:创建一个包含实例内部类的类 这句话怎么理解 最好能举例说明。我尝试用我的理解来解答一下这个题目。
      1.这个题目要创建一个类。
      2.这个类要包含一个内部类。
      3.这个内部类要有实例。

//1。定义一个人体的外部类,每个人身体里边都有心脏,心脏在身体内部,所以人体为外部类,心脏为内部类。
class RenTi
{      //应楼主要求,定义一个  年龄  变量,每个人身体,有身体的年龄,心脏有心脏的年龄,有些人60岁的身体30岁的心脏,身体倍棒啊!
            int  age=60;
       //2。定义一个心脏的内部类,心脏一般不能在外部直接访问private修饰,不然的话,这个世界太疯狂了,《画皮》的小唯在世啊。

       private class XinZang
       {                   //定义内部类成员变量  心脏年龄
                    int age = 30;
              //内部类方法,这里我只是用来显示我们已经访问了内部类。

              void show()
              {
                    System.out.println("你的身体年龄是:"+RenTi.this.age);  //访问身体年龄
                        System.out.println("你的心脏年龄是:"+age);             //访问心脏年龄
                    System.out.println("我们正在通过手术,修复心脏功能");

                }
        }
        //当然,当心脏出现问题的时候,我们可以通过外部类方法【手术】来访问内部类实例对象【心脏】。
        public void shoushu()
        {
             //3。通过【内部类实例对象】访问内部类
             XinZang  xz= new XinZang();            
             xz.show();
         }
}

//写一个主函数来测试一下吧!
class TestXinZang
{
     public static void main(String[] args)
     {
           RenTi  body = new RenTi();
           //手术开始了~~~~
           body.shoushu();
      }
}
运行结果:
       你的身体年龄是:60       你的心脏年龄是:30
       我们正在通过手术,修复心脏功能


有图有真相:







作者: 黑马王晓明    时间: 2013-8-11 00:08
yan 发表于 2013-8-10 22:08
成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要 ...

谢谢                             
作者: 黑马王晓明    时间: 2013-8-11 00:22
布易般 发表于 2013-8-10 23:31
问题:创建一个包含实例内部类的类 这句话怎么理解 最好能举例说明。我尝试用我的理解来解答一下这个题目。 ...

十分感谢 如果在这个题的基础上 分别在外部和内部定义一个同名同类型的变量 并在内部类中定义一个方法 实现分别打印外部类和内部类的变量 该怎么做




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2