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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 靓仔 于 2014-2-23 16:13 编辑

1:匿名内部类其实就是内部类的简写格式。
2:定义匿名内部类的前提:
        内部类必须是继承一个类或者实现接口
3:匿名内部类的格式: new 父类或者接口(){定义子类的内容}
4:其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖,可以理解带内容的对象。
5:匿名内部类中定义的方法最好不超过三个。
*/
abstract class AbsDemo
{
        abstract void show();
}
class Outer
{
        int x = 3;
        /*
        class Inner extends AbsDemo
        {
                void show()
                {
                        System.out.println("x =="+x);
                }
        }
        */
        public void function()
        {
                //new Inner().show();
                AbsDemo d=new AbsDemo()//替代绿色部分
                {
                        void show()
                        {
                                System.out.println("x=="+x);
                        }
                        void abc()
                        {
                                System.out.println("hah");
                        }
                };
                d.show();
                //d.abc();编译失败
        }
}
class  InnerClassDemo5
{
        public static void main(String[] args)
        {
                new Outer().function();
        }
}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
  AbsDemo d=new AbsDemo()//这里相当于建立了AbsDemo的字类对象
                {
                         void show()
                         {
                                 System.out.println("x=="+x);
                         }
                         void abc()
                         {
                                 System.out.println("hah");
                         }
                 };
这里相当于建立了AbsDemo的子类对象,这个子类对象覆盖了父类的方法并且自定义了一个abc方法,abc方法是子类的方法 d是指向父类的引用  不能调用子类的自定义方法  但是可以调用被覆盖的父类方法  这里其实是多态的问题 父类不能转型成子类  所以子类自己的方法 父类不能用

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
薆情媬証書 来自手机 中级黑马 2014-2-21 19:54:46
藤椅
楼上正解,楼主写的 new AbsDemo() {}是内部类,而内部类相当于一个子类对象,然后楼主将父类类型(AbsDemo)指向了子类对象(就是该内部类!)根据面向对象的三大特性之一的多态性这样写没有任何问题,但是其缺点就是访问的局限性,该对象(d)只能访问父类中的成员和方法,无法访问子类特有的属性和方法!总得来说就是体现了多态访问的局限性

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
请注意这句话:内部类必须是继承一个类或者实现接口
个人认为能理解这句话就能够也很容易理解这个问题了
在父类引用指向子类对象的时候(既多态),是无法引用子类中的方法的

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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