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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑龙江—刘鹏 初级黑马   /  2012-7-14 23:13  /  1465 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑龙江—刘鹏 于 2012-7-15 09:17 编辑

不是说抽象类不可以建立对象吗?
但是为什么我建立了对象了呢?
abstract class Abstract_0
{

}
class Abstract_1
{
         public static void main(String[] args)
{
         Abstract_0     z = new Abstract_0(){};
}不是说抽象类不可以建立对象吗?
但是为什么我建立了对象了呢?

abstract class Abstract_0
{
       void show()
       {
         System.out.print("liuepng ");
       }
}
class Abstract_1
{
         public static void main(String[] args)
{
         Abstract_0     z = new Abstract_0(){};
         z.show();
}
}
这样之后就可以打印了啊






很正常呀?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
Abstract_0     z = new Abstract_0(){};//这是一个内部类,建立的并不是Abstract_0  的对象,而是它的子类对象,{}里面就是子
                                                             //类要实现的父类Abstract_0 中的方法

评分

参与人数 1黑马币 +30 收起 理由
刘笑 + 30 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 黑马刘涛 于 2012-7-15 00:01 编辑

创建匿名内部类时会立即创建一个该类的实例,这个类
定义立即消失,匿名内部类不能重复使用。
    定义匿名内部类的格式如下:
new 父类构造器(参数列表)|实现接口()
{
  //匿名内部类的类体部分
}
从上面定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。
  1. class Abstract_1
  2. {
  3.          public static void main(String[] args)
  4. {
  5.         class Inner extends Abstract_0{
  6. //无内容
  7. }
  8.       Inner in = new Inner();
  9.      Abstract_0 z = in; //  相当于Abstract_0     z = new Abstract_0(){};// 实例化了一个匿名内部类对象

  10.             z.show();
  11. }
  12. }
复制代码
  1. abstract class Abstract_0
  2. {
  3.        void show()
  4.        {
  5.          System.out.print("liuepng ");
  6.        }
  7. }
  8. class Abstract_1
  9. {
  10.          public static void main(String[] args)
  11. {
  12.          Abstract_0     z = new Abstract_0(){};// 实例化了一个匿名内部类对象
  13.          z.show();
  14. }
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 正解,赞一个!

查看全部评分

回复 使用道具 举报
黑马刘涛 发表于 2012-7-14 23:55
创建匿名内部类时会立即创建一个该类的实例,这个类
定义立即消失,匿名内部类不能重复使用。
    定义匿名 ...

呼呼 内部类还没看到呢 谢谢啊
回复 使用道具 举报
你是黑龙江那里的 我是哈尔滨的 现在在申请黑马 有什么指导我的 不麻烦你的情况下 教教我把
回复 使用道具 举报
黑马田冬雪 发表于 2012-7-19 23:13
你是黑龙江那里的 我是哈尔滨的 现在在申请黑马 有什么指导我的 不麻烦你的情况下 教教我把 ...

哈我也是新手 关于新手怎么办 你可以问下黑马客服和论坛公告栏
回复 使用道具 举报
杨康 中级黑马 2012-7-19 23:51:41
7#
如果是  Abstract_0     z = new Abstract_0(){};
这个是Abstract_0的子类对象,是用了多态的概念,父类引用指向子类对象,编译可以通过。
如果是  Abstract_0     z = new Abstract_0();
这个是创建Abstract_0的对象,这时候由于该类是个抽象类,不能创建对象,编译不能通过。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马