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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵亚威 中级黑马   /  2013-4-4 11:07  /  2170 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵亚威 于 2013-4-4 18:51 编辑

public abstract class EnumDemo {
   private EnumDemo(){}
   public  static EnumDemo ed=new EnumDemo(){
           public EnumDemo method(){
                    
                return ed;
           }
  };
         public abstract EnumDemo method();
}
抽象类不是不能创建对象嘛 为什么内部类却可以创建对象?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

8 个回复

倒序浏览
抽象类特点:
  1,抽象方法一定定义在抽象类中。
  2,抽象方法和抽象类都必须被abstract关键字修饰。
  3,抽象类不可以用new创建对象,因为调用抽象方法没意义。
  4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类 只覆盖部分抽象方法,那么该子类还是一个抽象类。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报

抽象类特点:
  1,抽象方法一定定义在抽象类中。
  2,抽象方法和抽象类都必须被abstract关键字修饰。
  3,抽象类不可以用new创建对象,因为调用抽象方法没意义。
   4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类 只覆盖部分抽象方法,那么该子类还是一个抽象类。
回复 使用道具 举报
你的代码中创建的是匿名内部类,匿名内部类是该类的子类,已经覆盖了 public abstract EnumDemo method();方法;亲,希望对你有帮助
回复 使用道具 举报
  1.         //匿名内部类通过实现其抽象方法,将会获得另外的实现  
  2.         public static EnumDemo ed = new EnumDemo() { //获取匿名内部类实例
  3.                 public EnumDemo method() {        //实现了父类的抽象方法
  4.                         return ed;
  5.                 }
  6.         };
复制代码
创建的是抽象类的子类
匿名内部类是没有名字的,匿名内部类要重写父类或接口的方法。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
匿名内部类的格式   new 父类名或接口名(){方法(){}};    你可以把它看为三部分 new,  父类名或接口名(),  方法(){}};    new代表的是创建新对象;父类名或接口名()这部分指的是当前这个匿名的类的父类或实现的接口;{方法(){}}; 代表的是匿名类的的类体 。所以你程序里的 匿名内部类是可以new的。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
public  static EnumDemo ed=new EnumDemo(){
           public EnumDemo method(){
                    
                return ed;
           }
  };
你这段代码是创建匿名内部类的代码。匿名内部类继承了抽象类 EnumDemo。他是抽象类EnumDemo的实现类。当然可以构造对象了

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
JVM在加载类的时候,先加载父类,再加载子类,上面代码中的EnumDemo为父类, new EnumDemo(){。。。。。}是一个匿名内部类,
public EnumDemo method()方法重写了EnumDemo类的所有抽象方法“public abstract EnumDemo method(); ”此时他已经不再是一个抽象类了,
实际上在它内存中父类已经存在了
回复 使用道具 举报
若还有问题,继续追问; 没有的话,尽量及时将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马