11.3 嵌套类

  面试例题1:请说明static nested class和inner class的不同。

  答案:

  1.nested(嵌套)class(一般是C++的说法)

  nested class是合成型聚集关系(Composite Aggregation)的另一种表达方式,也就是说nested class也可以用Aggregation表达出来。但是,nested class更加精确地表达了一种专用的、紧耦合的关系,尤其在代码生成时,nested class在Java中映射成inline class。比如,计算机专用开关电源类可以作为计算机类的nested class,但是,电池组类就不一定适合作为计算机类的nested class,因为,电池组类表述的是一个过于通用的对象,可能还被包含(Aggregation)于模型中的其他设备对象。class A nested in class B,则说明A是一个nested class,一般A是用来完成B中的某种重要功能的。

  2.inner class(一般是Java的说法)

  Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。

  静态内部类(inner class)意味着:创建一个static内部类的对象,不需要一个外部类对象;不能从一个static内部类的一个对象访问一个外部类对象。

  面试例题2:关于下面类的定义,以下哪种说法是正确的?[研华科技2005年11月面试题]

  public class Droitwich{

  class one{

  private class two{

  public void main(){

  System.out.println("two");

  }

  }

  }}

  A.此代码不能编译成功,因为该类嵌套了不止一层

  B.此代码不能编译通过,因为class two是私有的

  C.此代码可以编译通过,并且在运行的时候输出字符串two

  D.此代码编译没有错误

  解析:

  内部类或嵌套类在类层级上没有限制,所以选项A是错误的。

  内部类可以是私有类,所以选项B也是错误的。

  选项C的main方法不是public static void main的,并且假设命令行是java Droitwich,它不能在任何地方被调用。

  答案:D

读书导航