黑马程序员技术交流社区

标题: 内部类作用什么?在什么地方用?为了解决什么问题?怎... [打印本页]

作者: cain    时间: 2014-6-7 23:37
标题: 内部类作用什么?在什么地方用?为了解决什么问题?怎...
内部类作用什么?在什么地方用?为了解决什么问题?怎么用最好?

作者: cain    时间: 2014-6-7 23:44
求大神指点
作者: 王琪    时间: 2014-6-8 01:16
本帖最后由 王琪 于 2014-6-8 02:09 编辑

这么晚了,不休息啊?内部类就像内部的一个模块,方便对属性和方法进行封装
作者: zly1992008    时间: 2014-6-8 08:20
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。
*内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。

注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同。
1. 成员内部类成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
      要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的,了解这一点,就可以明白更多事情,在此省略更多的细节了。

2. 局部内部类      局部内部类,是指内部类定义在方法和作用域内。
3. 嵌套内部类       嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系

       嵌套类和普通的内部类还有一个区别:普通内部类不能有static数据和static属性,也不能包含嵌套类,但嵌套类可以。而嵌套类不能声明为private,一般声明为public,方便调用。
4. 匿名内部类      有时候为了免去给内部类命名,便倾向于使用匿名内部类,因为它没有名字。

内部类说来话长。。楼主要见到例子才能理解,回复篇幅有限,我就不写例子了。见到一次理解一次就行~



作者: ☆枫の云    时间: 2014-6-8 08:55
本帖最后由 ☆枫の云 于 2014-6-8 08:56 编辑

学到后面你就会有了解了,学GUI的时候就用到了内部类,我只知道这一个作用,就是如果想实现一个抽象类中的方法又不想继承时就可以用。
  1. abstract class A
  2. {
  3.         void func1(){};
  4. }

  5. //第一种方式:内部类,内部类相当于父类的子类对象。
  6. class B
  7. {
  8.         void func3(){
  9.                 void func2(new A(){
  10.                         void func1(){
  11.                                 //实现内容;
  12.                         }
  13.                 }.func1();
  14.         }
  15. }

  16. //第二种方式:继承
  17. class B extends A
  18. {
  19.         void fun1(){
  20.                 //实现内容;
  21.         }

  22.         void fun2(){
  23.                 new B().fun1();
  24.         }
  25. }
复制代码

作者: 路漫漫_求索    时间: 2014-6-8 20:03
      1. 内部类的作用是什么?在什么地方用?
* 当描述事物时,事物的内部还有事物,该事物用内部类来描述。
* 因为内部事物可以直接访问外部事物的内容。
*
* 举例:人体
* 人体里面包含心肝脾肺肾
*
* 人体:是一个外部类
*  |--包含心脏跳动的方法
*  |--包含肺的活动方法
*  
*      心脏:是一个内部类
*      |--包含左心房的方法
*         |--包含右心房的方法
*  
*  
* class Body
* {
*      privateclass XinZang  //内部类定义时,最好将其私有,不对外暴露
*      {
*         voidshow TiaoDong(){}
*      }
*
*      //对钱提供方法,来访问内部事物
*      publicvoid show()
*      {
*         newXinZhang().TiaoDong();  创建心脏对象 ,并访问跳动方法
*      }
* }
    2. 为了解决什么问题?
* ---------------------------------------
* 把心脏定义在人体里面,这样符合自然规律。心脏可以直接在内部访问人体内的方法。

* 如果定义在外面,心脏还要创建人体的对象,然后才可以访问人体的方法,

class Oute{
        private static int x =3;
       
        static class Inner{ //静态内部类
                static void function(){
                        System.out.println("Inner:" + x);//可以直接访问外部类静态成员变量
                }
        }
       
        static class Inner2{
                void method(){
                        System.out.println("inner2.show");
                }
        }
       
        public static void show(){
                new Inner2().method();//外部类静态方法访问内部类时,内部类也必须是静态的。
        }
}
public class _Inner_static {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                new Oute.Inner().function();//在外部其他类中,访问内部类的非静态成员
                Oute.Inner.function();//在外部其他类中,访问内部类的静态成员
               
                new Oute().show();//调用外部类方法
        }
}
希望能对你有帮助。。。。


作者: 、海    时间: 2014-6-8 20:10
学习学习!
作者: xiazhixing    时间: 2014-6-8 20:20
没看明白。。
作者: 谭荣强    时间: 2014-6-8 22:10
又是你,又问这些总结性的问题
作者: 葛晓东    时间: 2014-6-8 22:22
zly1992008 发表于 2014-6-8 08:20
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。
*内部类可以是静态static的,也可用 ...

好牛掰  好齐全 啊。学了不少,这里面用的最多的还是匿名内部类吧

作者: superob123    时间: 2014-6-8 22:50
内部类别想那么复杂,它就是一个成员,用成员的规程去看待它就可以了
作者: 阿布Yocan    时间: 2014-6-9 11:33
☆枫の云 发表于 2014-6-8 08:55
学到后面你就会有了解了,学GUI的时候就用到了内部类,我只知道这一个作用,就是如果想实现一个抽象类中的 ...

我也是发现了在学GUI时,加载监听器的时候,用到了匿名内部类




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