黑马程序员技术交流社区

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

作者: huima    时间: 2013-4-14 17:44
标题: 关于内部类问题
本帖最后由 huima 于 2013-4-15 08:38 编辑

什么是内部类,static nested class 和inner class的区别是什么,求详细解答???
作者: 林声荣    时间: 2013-4-14 18:01
  内部类:将一个类定义在另一个类的里面,对里面那个类就成为内部类(内置类,嵌套类);
  访问特点:内部类可以直接访问外部类中的成员,包括私有成员;
   而外部类要访问内部类中的成员必须要建立内部类的对象;
  访问格式:1、当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中直接建立内部类对象;
  格式:         外部类名.内部类名  变量名 = 外部类对象.内部类对象;
  如:  Outer.Inner  in = new Outer().new Inner();        //Inner为Outer类中的内部类
   2、当内部类在成员位置上,就可以被成员修饰符所修饰。
  比如,private:将内部类在外部类中进行封装;
          Static:内部类就具备static的特性,当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限;
  在外部其他类中,如何直接访问static内部类的非静态成员呢?
  New Outer.Inner().function();
  在外部其他类中,如何直接访问static内部类的静态成员呢?
  Outer.Inner.function();       
  注意:当内部类中定义了静态成员,该内部类必须是static的;
   当外部类中的静态方法访问内部类时,内部类也必须是static的;
   内部类定义在局部时:
  不可以被成员修饰符修饰
  可以直接访问外部类中的成员,因为还特有外部类中的引用。
但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
  使用情况:一般当我们描述一个事物时,该事物用内部类还有事物,则该事物用内部类来描述;

static nested class 和inner class的区别:
inner class(内部类)就是嵌套在另一个类中,作为该类中的成员;而static nested class(静态嵌套类),就是将内部类定义为静态的、、、
作者: lipingan0520    时间: 2013-4-14 18:06
内部类简单的说,就是类里面,还有类。就像循环一样,有外循环和内循环。
作者: 沈浩    时间: 2013-4-14 18:06
内部类  就是将一个类定义在另一个类的里面,对里面那个类就称为内部类或者内置类或嵌套类
对于你说的static nested class 和inner class区别    当内部类被静态修饰后会出现访问局限      
作者: 庄生晓梦    时间: 2013-4-14 18:11
将一个类定义在另一个类里面,对里面那个类被称为内部类;
Nested Class以前不了解,所以下面是百度到的:
Nested Class 一般是C++的说法,Inner Class 一般是JAVA的说法。

Nested class分为静态Static nested class 的和非静态的 inner class,

静态的Static nested class是不可以直接调用它的外部类enclosing class的,但是可以通过外部类的引用来调用,就像你在一个类中写了main方法一样。

非静态类inner class 可以自由的引用外部类的属性和方法,但是它与一个实例绑定在了一起,不可以定义静态的属性、方法 。


作者: Alan    时间: 2013-4-14 18:24
inner classs 表示内部类  static classs 表示此类静态  下有详细说明
内部类是指在一个类的内部再定义一个类,相对这个类为外部类,定义的类为内部类inner class。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。

   内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。


为什么要用内部类?

    典型情况是:内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:
  每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。



作者: Alan    时间: 2013-4-14 18:24
  http://mars914.iteye.com/blog/1343505
作者: LINUS    时间: 2013-4-14 20:06
本帖最后由 LINUS 于 2013-4-14 20:08 编辑

什么是内部类:
①类中有类,就是内部类
②成员内部类(一般都是private的)
③局部内部类(局部就是方法里)
④匿名局部内部类(这个类没有名字)
⑤局部内部类特殊情况(在属性的显示初始化语句中)
⑥嵌套类(其实就是static的成员内部类)

内部类安全性更高。

发现事物里面还有具体事物,就考虑使用内部类形式。

内部类可以直接使用外部类成员,私有也可以使用


对于外部类,要想使用内部类成员,必须建立内部类对象才行


内部类写法:Inner 内部类 class Inner {}






作者: 黄玉昆    时间: 2013-4-14 22:42
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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