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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 磊弟哥哥 中级黑马   /  2014-9-12 21:31  /  770 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo
{
        public static void main(String []args)
        {
                new Outer().function();
        }
}
/*
匿名内部类
1.匿名内部类其实就是内部类的间歇格式
2,定义内部类的前提
   内部类必须继承一个类或者实现一个接口
3,匿名内部类格式:new父类或者接口(){定义子类内容}
4,其实匿名内部类就是一个匿名子类对象,可以理解为带内容的子类对象
*/
abstract class Abs
{
        abstract void show();
}
class Outer
{
        int x=3;
        /*
        class Inner extends Abs
        {
                void show()
                {
                        System.out.println("show:"+x);
                }
        }
        */
        public void function()
        {
                //new Inner().show();建立内部类对象调用内部类方法
                //以下是匿名内部类,他是父类的子类的对象,因为只有子类才能复写抽象父类的抽象方法,他是以上注释部分的简化格式
                //要创建子类对象,但子类没名字,所以用父类的;但父类是抽象类,不能建立对象,所以就加上{},里边加上子类复写的方法

                /*
                new Abs()
                {
                        void show()
                        {
                                System.out.println("show:"+x);
                        }
                        void show1()//也可定义子类特有功能
                        {
                                System.out.println("show1:"+x);
                        }
                }.show1();//匿名对象只能调用对象一次
                new Abs()
                {
                        void show()
                        {
                                System.out.println("show:"+x);
                        }
                        void show1()//也可定义子类特有功能
                        {
                                System.out.println("show1:"+x);
                        }
                }.show();
                */



                //发现要调用匿名内部类的多个方法要建立多个内部类,所以考虑建立一个对象
                //但是内部类没名字,所以用父类类名,建立子类对象
                //格式:父类名 对象名=new 父类名(){};
                //有局限 不能执行父类中未定义的方法,调用方法一次只能调用一个
                Abs a=new Abs()
                {
                        void show()
                        {
                                System.out.println("show:"+x);
                        }
                        void abc()//该函数无实际意义,因为在父类对象中没有定义,所以执行不了,写匿名函数就是为了覆盖父类功能的
                        {
                                System.out.println("show:"+x);
                        }
                };
                a.show();
                //a.abc  父类中没有定义,不能执行
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马