黑马程序员技术交流社区

标题: 为什么这里会实例化一个接口? [打印本页]

作者: 匡文    时间: 2013-10-26 00:18
标题: 为什么这里会实例化一个接口?
本帖最后由 匡文 于 2013-10-26 14:50 编辑
  1. package com.itcast.collection;
  2. public class Demo4{
  3.         public static void main(String[] args){
  4.                 Outer out = new Outer();
  5.                 out.print();
  6.         }
  7. }

  8. interface A{
  9.         public void test();
  10. }

  11. class Outer{
  12.         public void print(){
  13.                 new A(){        //这里为什么可以实例化一个接口?
  14.                         public void test(){
  15.                                 System.out.println("内部类");
  16.                         }
  17.                 }.test();
  18.         }
  19. }
复制代码
复习的时候看到这个例子,这里A是一个接口,为什么可以New A()?接口不是不能创建对象吗?

作者: Yuan先生    时间: 2013-10-26 00:31
  1. class Outer{
  2.         public void print(){
  3.                 new A(){        //这是内部类,A接口的实现类--匿名内部类,花括号内的代码就是接口的实现
  4.                         public void test(){
  5.                                 System.out.println("内部类");
  6.                         }
  7.                 }.test();
  8.         }
  9. }
复制代码

作者: wenbaoxing    时间: 2013-10-26 00:35
这是匿名内部类。

再给你个例子,明白这个,你的就明白了。
  1. abstract class Bad//建立一个父类
  2. {
  3.     abstract void show();
  4. }
  5. class Person//建立一个类
  6. {
  7.         Bad b=new Bad()//匿名内部类
  8.         {
  9.                  void show()//覆写父类方法
  10.                 {
  11.                         System.out.println("chenggong");
  12.                 }
  13.         };


  14. }
  15. class HeimaDemo
  16. {
  17.         public static void main(String[] args)
  18.     {        
  19.                 new Person().b.show();

  20.                                 //这个是匿名内部类实现了接口并调用了show方法
  21.                                 new Bad()
  22.                                 {
  23.                                         void show()
  24.                                         {
  25.                                                 System.out.println("hahah");
  26.                                         }
  27.                                 }.show();
  28.     }
  29. }
复制代码





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