它和非静态内部类有什么区别吗:
- 静态内部类的实例不再持有外部类的实例,它也就无法访问外部类的非静态方法和属性。
- 静态内部类创建实例时,也就不再需要外部类首先实例化了。
- 静态内部类,可以有静态的和非静态的方法和属性,非静态内部类则只能有非静态的方法和属性(原因没搞明白)
package innerclass;
abstract class BaseClass{
abstract void showMe();
}
public class Outer {
private int count = 10;
static private int sum = 100;
private static class Inner extends BaseClass{
private String text = "I am in ";
public static String name = "Inner class";
@Override
void showMe() {
//无法访问外部类的,非静态数据
//System.out.println(count);
System.out.println(sum);
// TODO Auto-generated method stub
System.out.println("i am in Inner class");
}
}
public static BaseClass getInner(){
return new Inner();
}
public static void main(String[] args){
BaseClass mi = Outer.getInner();
mi.showMe();
//无法调用test,因为返回的内部类已经被转换成 BaseClass类型了。
//mi.test();
}
}
在接口中定义静态内部类:
一个类定义在接口内,会自动成为 public static 类。
interface Animal{
void walk();
//我们甚至可以在这里把接口实现了
class Dog implements Animal{
@Override
public void walk() {
System.out.println("I am a dog");
}
}
}
public class Outer{
public static void main(String[] args){
new Animal.Dog().walk();
}
}