黑马程序员技术交流社区

标题: 关于匿名内部类的一点小疑问 [打印本页]

作者: 陈迎春    时间: 2013-4-11 13:31
标题: 关于匿名内部类的一点小疑问
本帖最后由 陈迎春 于 2013-4-13 11:16 编辑

问题:
1,什么叫实例化?是指new 出一个对象的引用,这个引用就叫实例化的对象吗?
2,抽象类,接口能被实例化吗?原因是什么?
3,这里的OuterInterface是不是被实例化了呢?
代码如下:
  1. //定义一个接口
  2. interface OuterInterface
  3. {
  4. }
  5. public class OuterClass
  6. {
  7.         public OuterInterface doit()
  8.         {

  9.                 return new OuterInterface(){//这里的OuterInterface是不是被实例化了呢?
  10.                         private int i = 0;
  11.                         public int getValue()
  12.                         {
  13.                                 return i;
  14.                         }
  15.                 };
  16.         }
  17. }
复制代码

作者: 黑马19我最牛    时间: 2013-4-11 14:00
匿名类是一种特殊的局部内部类
可以从类继承匿名类,还可以从抽象类,接口继承(实现)匿名类
匿名类是对原类的一个继承,同时创建了实例,{} 就是继承
以后的类体。类体中可使用所有类的语法。
所以说你那其实已经实现接口了!
如果结果不被实现是不能被是实例化!
作者: 赵晓东    时间: 2013-4-11 18:40
本帖最后由 赵晓东 于 2013-4-11 18:48 编辑

问题:
1,什么叫实例化?是指new 出一个对象的引用,这个引用就叫实例化的对象吗?
      恩,对,实例化是面向对象的重点。你自己写的类好比图纸,实例化就是通过图纸制造出来的实体,具备图纸上所有的功能。new就是实例化的动作,引用就是实例化的实体。
2,抽象类,接口能被实例化吗?原因是什么?
     抽象类和接口不能被实例化,因为它们没有构造函数,没有构造函数就不能被实例化,它们的主要作用就是定义功能让其子类去实现这些功能。
3,这里的OuterInterface是不是被实例化了呢?
    OuterInterface是被实例化了,OuterInterface是一个接口,其实new OuterInterface是实现了接口OuterInterface并实现了其接口中定义的功能
作者: 陈迎春    时间: 2013-4-11 21:25
赵晓东 发表于 2013-4-11 18:40
问题:
1,什么叫实例化?是指new 出一个对象的引用,这个引用就叫实例化的对象吗?
      恩,对,实例化 ...

谢谢你的回答。
我还有点疑问,在第二个问题里,你说接口不可以被实例化的,但为什么第三个问中你又说OuterInterface接口是被实例化了呢?这两者的区别在哪呢?
作者: 赵晓东    时间: 2013-4-11 21:39
陈迎春 发表于 2013-4-11 21:25
谢谢你的回答。
我还有点疑问,在第二个问题里,你说接口不可以被实例化的,但为什么第三个问中你又说Out ...

也许是我没说明白吧,接口是不能被实例化的,要知道匿名内部类是没有名字的,而你又要实现OuterInterface接口,所以一般格式就是这样写:new OuterInterface(){执行语句}; 这样就创建了一个实现OuterInterface接口的匿名(没有名字的)内部类。在{}里面是你实现接口的方法。
作者: huima    时间: 2013-4-11 21:53
第一问的回答
如:
class A {
  int i;
}
这里A就是一个类
而对象就是一个类的具体的某一个,如:
A a1 = new A();
A a2 = new A();
a1 a2都是对象

而创建对象的过程就叫实例化
因此有时候我们也将对象叫做一个类的实例。
关于第二问的答案是:抽象类(abstract class)和接口(interface)均不能被实例化,这是由其本身特点决定了的。
作者: 陈迎春    时间: 2013-4-13 11:13
huima 发表于 2013-4-11 21:53
第一问的回答
如:
class A {

谢谢指导、、、、
作者: 陈迎春    时间: 2013-4-13 11:16
赵晓东 发表于 2013-4-11 21:39
也许是我没说明白吧,接口是不能被实例化的,要知道匿名内部类是没有名字的,而你又要实现OuterInterface ...

谢谢!我懂了,其实OuterInterface并没有被实例化,而new OuterInterface(){执行语句};仅仅是创建了一个实现OuterInterface接口的类,只不过这个类是匿名的而已!
作者: huima    时间: 2013-4-13 11:20
陈迎春 发表于 2013-4-13 11:13
谢谢指导、、、、

都是朋友,指导说不上哈,优势互补吧!!!




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