今天发现一个java内部类的一个比较奇怪的特性,在其他package调用时,不能写package名的前缀,具体代码如下:
以下代码为Outer.java, 在package com.ref中
package com.ref;
/**
* Created by Administrator on 2016/1/1.
*/
public class Outer {
// 由于需要另一个package调用,所以修饰符为public
public class Inner {
public Inner(){
System.out.println("This is Inner class construction!");
}
}
}
以下是主函数,在com.company package 中
package com.company;
public class Main {
public static void main(String[] args) {
com.ref.Outer aOuter = new com.ref.Outer();
com.ref.Outer.Inner aInner = aOuter.new Inner();
//com.ref.Outer.Inner aInner = aOuter.new com.ref.Inner(); //错误,Inner() 不在com.ref 里面
}
}
com.ref.Outer.Inner aInner = aOuter.new Inner();
加上package就错了
//com.ref.Outer.Inner aInner = aOuter.new com.ref.Inner(); //错误,Inner() 不在com.ref 里面
当然写成下面这也也不对:
//com.ref.Outer.Inner aInner = aOuter.new com.ref.Outer.Inner(); //错误,Inner() 不在com.ref 里面
这里需要注意下。