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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 匡文 中级黑马   /  2013-10-26 00:18  /  1226 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 匡文 于 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()?接口不是不能创建对象吗?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

正序浏览
这是匿名内部类。

再给你个例子,明白这个,你的就明白了。
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
  1. class Outer{
  2.         public void print(){
  3.                 new A(){        //这是内部类,A接口的实现类--匿名内部类,花括号内的代码就是接口的实现
  4.                         public void test(){
  5.                                 System.out.println("内部类");
  6.                         }
  7.                 }.test();
  8.         }
  9. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马