黑马程序员技术交流社区

标题: 请教:关于抽象函数问题; [打印本页]

作者: 黑龙江—刘鹏    时间: 2012-7-14 23:13
标题: 请教:关于抽象函数问题;
本帖最后由 黑龙江—刘鹏 于 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();
}
}
这样之后就可以打印了啊






很正常呀?


作者: 王冰    时间: 2012-7-14 23:36
Abstract_0     z = new Abstract_0(){};//这是一个内部类,建立的并不是Abstract_0  的对象,而是它的子类对象,{}里面就是子
                                                             //类要实现的父类Abstract_0 中的方法

作者: 黑马刘涛    时间: 2012-7-14 23:55
本帖最后由 黑马刘涛 于 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. }
复制代码

作者: 黑龙江—刘鹏    时间: 2012-7-15 09:09
黑马刘涛 发表于 2012-7-14 23:55
创建匿名内部类时会立即创建一个该类的实例,这个类
定义立即消失,匿名内部类不能重复使用。
    定义匿名 ...

呼呼 内部类还没看到呢 谢谢啊
作者: 黑马田冬雪    时间: 2012-7-19 23:13
你是黑龙江那里的 我是哈尔滨的 现在在申请黑马 有什么指导我的 不麻烦你的情况下 教教我把
作者: 黑龙江—刘鹏    时间: 2012-7-19 23:48
黑马田冬雪 发表于 2012-7-19 23:13
你是黑龙江那里的 我是哈尔滨的 现在在申请黑马 有什么指导我的 不麻烦你的情况下 教教我把 ...

哈我也是新手 关于新手怎么办 你可以问下黑马客服和论坛公告栏
作者: 杨康    时间: 2012-7-19 23:51
如果是  Abstract_0     z = new Abstract_0(){};
这个是Abstract_0的子类对象,是用了多态的概念,父类引用指向子类对象,编译可以通过。
如果是  Abstract_0     z = new Abstract_0();
这个是创建Abstract_0的对象,这时候由于该类是个抽象类,不能创建对象,编译不能通过。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2