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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 樊永杰 黑马帝   /  2012-5-7 00:13  /  1782 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

成员内部类、局部内部类、静态内部类和匿名内部类,他们的特点和应用范围有没有了解比较深刻的,感觉我只是大致的理解,却不知道在什么时候应用,用哪个会更好些?

2 个回复

正序浏览
本帖最后由 张小锋 于 2012-5-7 01:43 编辑

你先要了解各种内部类的特点,才会知道在什么情况下适合使用那种内部内:
静态内部类特点:
静态内部类:(嵌套内部类,顶级嵌套类)
静态都是用来修饰类的内部成员的。比如静态方法,静态成员变量,静态常量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。

局部内部类的特点:
就是可以减少一些事件源的判断,而且结构清晰!修改比较容易

成员内部类特点:
内部类作为外部类的成员,可以访问外部类的私有成员或属性。
匿名内部类特点:
一种特殊的局部内部类
内部嵌套的没有名称只需实例化一次的类
匿名内部类在Java编程中用于回调的场景非常多
下面就用代码示例一些内部类的基本用法:
public class Text{
         int sign=3;
        public static void main(String[] args) {
                Text text=new Text();
                Runnable text=new Runnable(){表面上看起来它们似乎有名字,实际那不是它们的名字,只是Runnable类的子类的一个示例对象

   public void run() {
   
   }        }
        static class staticClass{//静态内部类()
                //静态嵌套类不能访问外部类的成员和方法。
        }
        public void  fun(){
                final int i=0;
                 class in_methodClass{                 //方法内部类
                                //不能有protected public private修饰,不能有static修饰
                         //仅仅在方法内部可见
                                private void fun() {
                                        System.out.println(i);//只能访问方法提中的final变量

                                }
                };
                 new in_methodClass();//只能在方法内构建其实例
        }
         class inText{//成员内部类
                // 成员内部类必须利用外部类实例创建
                int m=new Text().sign;// 成员内部类可以共享外部类的实例变量
        }
}
回复 使用道具 举报
成员内部类:当一个需要访问一个类中的成员属性和成员方法时,可以使用成员内部类,例如人和心脏的关系;

局部内部类:将这类定义到类中成员方法里面,访问的局部变量一样要是用final修饰。因为你在堆在创建了对象,
而调用这个方法是方法进栈,然后出栈,局部变量就消失了,所以必须final,使用同上;

静态内部类:当我们在类中定义了一个类,但是这个内部类有访问了外部的静态成员属性或者成员方法时,这个类也是静态的;

匿名内部类:当我们将一个类作为引用数据类型时,这个可以使用内部类来简化书写,但是匿名内部类必须继承或者实现某个接口,
因为是匿名,所以我们必须用接口或者父类的名字来创建的参数,建议使用匿名内部类时,实现的接口方法不要炒过3个。而且匿名累不累
只能用一次,哈哈,相当于一次性筷子。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马