面试例题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