Java SE:面向对象(下):内部类

内部类是面向对象(下)的最后一节,胜利就在眼前。

定义:在java中,可以将一个类定义在一个另一个类内部,则称为内部类。如果定义在一个方法的内部,则称为外部类。

一、实例内部类:未被static修饰。

(1):定义了一个Outclass类,并分别定义了三个整形变量,其中b用static修饰。然后给出了一个methodA方法,并将a赋值为10,打印a。再给出了一个静态方法methodB,然后打印b。

(2): 然后定义了一个实例内部类,然后定义了一个整形变量c。给出了一个methodIneer方法,将a赋值为100,b赋值为200,并先后调用methodA方法和methodB方法,之后将c赋值为300,然后打印c。

在实例内部类中可以直接访问外部类中:任意访问限定符修饰的成员。内部类没有定义变量a和b,所以这里是访问的外部类的a和b。

如果外部类和实例内部类中具有相同名称成员时,优先访问的是内部类自己的。这里的外部类和内部类都有c,优先访问内部类中的c。

如果要在实例内部类中访问外部类同名成员的时候,必须:外部类名称.this.同名成员名字。

(3):main方法中通过new关键字实例化了一个对象outClass,并分别访问变量a、b和c,并分别调用methodA方法和methodB方法。

然后创建了两个实例内部类对象innerClass1和innerClass2,并调用实例内部类中的methodInner方法。

【1】要访问实例内部类中成员,必须要创建实例内部类的对象。

【2】因为普通内部类定义与外部类成员定义位置相同,因此创建实例内部类对象时必须借助外部类。创建实例内部类对象时,必须先创建外部类对象。

【3】创建实例内部类对象:外部类.实例内部类 对象名 = new 外部类().new 实例内部类();

(4):输出结果:

外部类中成员变量a、b、c均未赋值,所以输出结果为0。

打印外部类中的methodA方法,输出结果为10。

打印外部类中的methodB方法,b仍然为未赋值,所以输出结果为0。

然后在实例内部类中调用methodA和methodB方法,分别打印10和200。

然后分别打印外部类和实例内部类中的变量c,分别输出300和400。

二、静态内部类:被static修饰的内部类。

(1):定义了一个外部类OutClass,分别定义了两个整形变量a和b,其中b用static修饰。给出了一个methodA方法,将a赋值为10,然后打印值a。再接着给出了一个methodB静态方法,用static修饰,打印值b。

接着定义了一个静态内部类InClass,用static修饰。接着给出了一个methodInner方法,在静态内部类中只能访问外部类的静态成员和静态方法。所以在静态内部类中给a赋值和调用methodA方法都会导致编译器报错。在静态内部类中给b赋值和调用methodB方法则可以正常运行。

(2):在main方法中创建了一个静态内部类对象inclass,然后调用methodInner方法,其实就是调用methodB方法。

创建静态内部类对象时,不需要先创建外部类对象。

(3): 输出结果:

在静态内部类中b被赋值为200,所以调用methodB方法,最终打印结果为200。

三、局部内部类:定义在方法体内部。

 概念:定义在外部类的方法体或者{}中,该种内部类只能在其定义的位置使用,一般使用得比较少,简单了解即可。

定义了一个外部类OutClass,然后定义了一个整形变量a,赋值为10,再给出了一个method方法,将b赋值为10。再在method方法中定义了一个局部内部类InnerClass,再在局部内部类中定义了一个methodInnerClass方法,分别打印a和b。再创建了一个innerClass对象,然后调用methodInnerClass方法。

局部内部类:定义在方法体内部,不能被public、static等访问限定修饰符。且只能在该方法体内部使用,其他位置都不能用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值