黑马程序员技术交流社区

标题: 匿名内部类中的一个问题。。。 [打印本页]

作者: 黑马任雪刚    时间: 2012-6-29 12:22
标题: 匿名内部类中的一个问题。。。
//匿名内部类的一个小练习。
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();

        }

}

作者: 陆强强    时间: 2012-6-29 12:42
因为你的show()方法是静态,所以要访问的成员内部类只能是静态,而下面的内部类在方法里面不能用static修饰

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



作者: 陌花╮有意、    时间: 2012-6-29 13:27
因为show()方法时静态,那么他所调用的内部内就必须静态




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