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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马超 中级黑马   /  2012-4-15 19:03  /  1494 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
匿名内部类定义前提:
内部类必须是继承一个类或者实现接口;
*/

abstract class AbsDemo
{
        abstract void show();
}

class Outer
{
        int x = 3;//可以直接访问外部类当中的成员x

        class Inner extends AbsDemo  //内部类必须是继承一个类或者实现接口
        {
                public void show()
                {
                        System.out.println("show:"+x);
                }
        }
        public void function()
        {
                //new Inner().show();

                //匿名内部类就是内部类的简写形式
                new AbsDemo()
                {
                        public void show()
                        {
                                System.out.println("sss");
                        }
                        public void run()
                        {
                        System.out.println("show:"+x);
                        }
                }.show();
        }
}


class niming
{
        public static void main(String[] args)
        {
                new Outer().function();
        }
}

3 个回复

倒序浏览
运行了一下你代码,没报错啊?
回复 使用道具 举报
是不是楼主,dos命令输错了。

123.jpg (2.36 KB, 下载次数: 18)

123.jpg
回复 使用道具 举报
楼主代码执行是没有错的,
不过在匿名内部类中你那样写run()方法是不会执行的。只会执行show()方法。
所以代码修改1:
abstract class AbsDemo {
        abstract void show();
}

class Outer {
        int x = 3;// 可以直接访问外部类当中的成员x
        public void function() {
                System.out.println("show:" + x);
                // 匿名内部类就是内部类的简写形式
                new AbsDemo() {
                        public void show() {
                                System.out.println("sss");
                        }
                }.show();
        }
}
public class niming {
        public static void main(String[] args) {
                new Outer().function();
        }
}

关于匿名内部类还可以修改成这样:
abstract class AbsDemo// 定义抽象类
{
        abstract void show();// 定义抽象方法
}

class Outer {
        int x = 3;// 可以直接访问外部类当中的成员x

        public void function() {
                System.out.println("sss");
                this.fun2(new AbsDemo() {// 匿名内部类
                                        @Override
                                        void show() {
                                                System.out.println("show:" + x);
                                        }
                                });
        }

        public void fun2(AbsDemo a) {// 接收抽象实例
                a.show();// 调用抽象方法
        }
}

public class niming {
        public static void main(String[] args) {
                new Outer().function();
        }
}

还可以修改成这样:

abstract class AbsDemo {
        abstract void show();
}

class Outer {
        int x = 3;// 可以直接访问外部类当中的成员x
        public AbsDemo returnAbsDemo(){
                System.out.println("sss");
                return new AbsDemo() {       
                        @Override
                        void show() {
                                System.out.println("show:" + x);
                        }
                };
        }
}

public class niming {
        public static void main(String[] args) {
                new Outer().returnAbsDemo().show();
        }
}

希望这些代码能给你帮助。{:soso_e113:}

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马