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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© weimoliang 中级黑马   /  2014-5-26 14:00  /  1112 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Outer {

  2.         // 普通内部类
  3.         class Inner {
  4.                 public void sayHello() {
  5.                         System.out.println("this is a inner!");
  6.                 }
  7.         }

  8.         // 内部类是接口类型
  9.         interface InterfaceInner {
  10.                 public abstract void sayHello();
  11.         }

  12.         public static void main(String[] args) {

  13.                 Outer out = new Outer();
  14.                 // 内部类想要时候必须通过 它的外部类。格式为:

  15.                 // 外部类.内部类 对象 = new 外部类().new 内部类()
  16.                 // 或者为:
  17.                 // 外部类.内部类 对象 = 外部类对象.new 内部类()
  18.                 Outer.Inner inner = out.new Inner();
  19.                 inner.sayHello();

  20.                 // 问题在这里,为什么接口类型的内部类不能通过上面的格式实例化?
  21.                 // 如果是这个样子就会报错
  22.                 Outer.InterfaceInner iiOne = out.new InterfaceInner() { // 这里报错

  23.                         @Override
  24.                         public void sayHello() {
  25.                                 // TODO Auto-generated method stub

  26.                         }
  27.                 };

  28.                 Outer.InterfaceInner iiTwo = new InterfaceInner() { // 这个样子就不会报错

  29.                         @Override
  30.                         public void sayHello() {
  31.                                 System.out.println("InterfaceInner");

  32.                         }
  33.                 };
  34.                 iiTwo.sayHello();

  35.         }

  36. }
复制代码
问题注释在代码内,各位同学copy,运行。看看是我哪里格式问题,还是理解有问题。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
内部类  干出接口来了?做什么用的   
回复 使用道具 举报
接口 不能直接实例化  实现的子类可以  

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

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