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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马任雪刚 中级黑马   /  2012-6-29 12:22  /  1780 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//匿名内部类的一个小练习。
abstract class Chouxiang
{
        abstract  void method();
}
class Outer
{
        static class Inner extends Chouxiang//
        {
                public void method()
                {
                        System.out.println("run");
                }
        }
        public static Chouxiang show()
        {
                return new Inner();//为什么上面内部类要用static修饰,而下面的匿名内部类却没有用到static呢????????????
//                return new Chouxiang()
//                {
//                        public  void method()
//                        {
//                                System.out.println("method run");
//                        }
//                };
        }
}
public class Nimingneibulei
{

       
        public static void main(String[] args)
        {
       
                Outer.show().method();

        }

}

3 个回复

倒序浏览
因为你的show()方法是静态,所以要访问的成员内部类只能是静态,而下面的内部类在方法里面不能用static修饰
回复 使用道具 举报
楼主自己也说一,上面是内部类 下面是匿名内部类。
首先要明白这两个者的应用场景及为什么用它,你就会明白了。
一、匿名内部类
   它使得 代码  简洁 美观 易懂
    如一般   事件处理的匿名适配器 类 ,都是用匿名内部类。 它也一般用在变量不需要引用它,用在实参做个参数传递给一个方法处理,或一方法体返回一匿名内部类。 另外 它的 格式一般是 new xxx(){}  它连名称都没有,还能用static来修改吗?
二、内部类
   1 、 它能很好的实际隐藏,可以用protect 甚至是private 来修改它。 而一般的类,要是被private 那就没意义了。
   2.    可以拥有外部类的所有元素访问权限。
   3.    可以用在多重继承上。 比如 一个类,想实现一接口的 run()方法,又想继承一类的 run()方法,此时内部类,将是个很好的选择。


回复 使用道具 举报
因为show()方法时静态,那么他所调用的内部内就必须静态
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马