[java起步]内部类访问小总结

代码显示有点问题,所以直接粘贴在下面。  :)

 

 class Outer
{
      class Inter
      {
            void function(){}
      }

}

 

前提:我们假定内部类的类名全称是 Outer.Inner

关于内部类及其中成员方法的静态与否一共有4种情况:

1、内部类非静态、内部类中方法非静态

2、内部类静态、内部类中方法非静态

3、内部类静态、内部类中方法静态

4、内部类非静态、内部类中方法静态


但由于方法一旦静态则类必须静态,所以扣除第4种情况后,还有3种情况。

下面逐一分析当外部(不是内部类所在的那个外部类,而是在如main等外部)分别访问3种不同情况内部类的格式


1、访问非静态内部类中的(非静态)成员方法:
Outer.Inner  haha = new  Outer().new Inner() 
new Outer().new Inner().function();  //匿名类访问


因为必须先new一个外部类,然后再在这个外部类里new一个内部类,所以一共要new两次。

-----------------------------------------------------------------------------------------------------------


2、访问静态内部类中的非静态成员方法:

new Outer.Inner().function()  


因为,我们都知道,一个类里的静态成员是随着类的加载而加载的,所以访问时不需要创建对象。而一个静态内部类对于外部类来说,也是静态成员,是随着外部类的加载而加载的,故调用静态内部类时,不用再去new外部类的对象了(当然要new也是可以的,那就是通过对象调用了)。这里上面的格式new的是内部类的对象。其非匿名类的调用格式形如:
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的,直接用类名的调用方式来调用。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值