以下当作学习笔记使用,避免遗忘
静态内部类与非静态内部类
这两种类都是为了编码方便,创建一个Outer类如下:
public class Outer {
static class InnerOne{
public static void show(){
System.out.println("静态内部类中的静态方法");
}
public void shows(){
System.out.println("静态内部类中的非静态方法");
}
}
class InnerTwo{
public void show(){
System.out.println("非静态内部类中的非静态方法");
}
}
}
创建一个Outer类的测试类
public class OuterTest{
//创建静态内部类的对象
Outer.InnerOne innerone=new Outer.InnerOne();
//创建非静态内部类的对象
Outer.InnerTwo innertwo=new Outer().new InnerTwo();
public static void main(String arg[]){
//调用静态内部类中的非静态方法
innerone.shows();
//调用静态内部类中的静态方法
Outer.InnerOne.show();
//调用非静态内部类中的方法
innertwo.show();
}
}
综上
结合代码,可以了解到,静态内部类创建对象的方式为:new 外部类名.静态内部类名() 即可;与此不同的是非静态内部类创建对象的方式是:new 外部类名().非静态内部类名()。同时还添加一条知识点:静态内部类中可以创建静态变量、静态常量已经静态的方法等而非静态内部类不允许,原因是非静态内部类的对象创建时必定伴随着其外部类的对象创建,从而不符合静态量由类名.调用的原则,结合上面代码即可知。