代码显示有点问题,所以直接粘贴在下面。 :)
class Outer
{
class Inter
{
void function(){}
}
}
前提:我们假定内部类的类名全称是 Outer.Inner
关于内部类及其中成员方法的静态与否一共有4种情况:
1、内部类非静态、内部类中方法非静态
2、内部类静态、内部类中方法非静态
3、内部类静态、内部类中方法静态
4、内部类非静态、内部类中方法静态
但由于方法一旦静态则类必须静态,所以扣除第4种情况后,还有3种情况。
下面逐一分析当外部(不是内部类所在的那个外部类,而是在如main等外部)分别访问3种不同情况内部类的格式:
Outer.Inner haha = new Outer().new Inner()
new Outer().new Inner().function(); //匿名类访问
因为必须先new一个外部类,然后再在这个外部类里new一个内部类,所以一共要new两次。
-----------------------------------------------------------------------------------------------------------
new Outer.Inner().function()
Outer.Inner haha = new Outer.Inner();
haha.function();
注意括号的使用!括号是参数列表的外围,有括号说明要传参数,说明这是一个方法。
创建对象,因为要用到构造函数,自然要用括号。比如内部类的构造函数全名是Outer.Inner()
而等号的左边,用于指定引用类型的Outer.Inner则是内部类的类名,类似int,不需要括号。
-----------------------------------------------------------------------------------------------------------
3、访问静态内部类中的静态成员方法:
Outer.Inner.function()
这时,对于外部类来说,内部类是静态成员,对于内部类来说,function是静态成员,则两个都不需要new对象,直接用格式形如类名.静态方法名() 来调用。
注意到:1和2都必须new对象,要么是new外部类再new内部类,要么就new内部类。而3是不需要new的,直接用类名的调用方式来调用。