一、内部类(一)什么是内部类?可以在一个类中定义一个类,称为内部类。这个内部类所在的类称为外部类。(二)内部类的作用1、内部类提供了更好的封装,将内部类隐藏在外部类中,不允许同包内的其他类访问该类。2、内部类的成员可以直接访问外部类的私有数据,因为内部类被视为外部类的成员。但是,外部类无法访问内部类的实现细节(如内部类的成员变量)。二、成员内部类1、什么是成员内部类在一个类中,除了可以定义成员变量和成员方法外,还可以定义一个类,称为成员内部类。内部类的成员可以访问外部类的所有成员。2、外部类访问内部类,首先创建外部类对象创建内部类对象,创建内部类对象的语法格式外部类名。内部类名变量名=新的外部类名{}。newinternalclassname{}3.如何定义成员内部类示例:classA{//定义类的成员变量privateStringname="张三";privateintage=28;//定义成员方法访问内部类publicvoidtest(){Bb=newB();b.say();}//定义一个成员内部类classB{publicvoidsay(){//成员内部类方法访问外部类的成员变量System.out.println("你好!我叫"+name+"今年"+age+"岁!");}}}publicclassp17{publicstaticvoidmain(String[]args){Aa=newA();//创建外部类a.test();//调用test()方法}}输出结果为:你好!我叫张三,今年28岁!A为外部类,在该类中定义了一个内部类B和test()成员方法。B类中有一个内部成员类的say()方法访问外部类的成员变量name和age,在test()方法中创建内部类B的实例对象,并调用say()方法。如果要让外部类访问内部类,首先要创建外部类对象才能创建内部类对象。创建内部类对象的代码如下:A.Ba=newA().newB();//创建内部类a.say();//调用test()方法三、静态内部类1、什么是静态内部类如果一个内部类是用static关键字声明的,这个内部类就称为静态内部类。可以在不创建外部类的情况下实例化对象。2.创建静态内部类语法格式外部类名。内部类名变量名=新的外部类名。内部类名()3.如何使用静态内部实例:classA{//定义类成员变量privatestaticStringname="李华";privatestaticintage=18;//定义静态内部类staticclassB{voidsay(){System.out.println("你好!我的名字是"+name+"今年"+age+"岁!");}}}publicclassp18{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubA.Ba=newA.B();//创建一个内部类a.say();//调用内部类的方法}}输出结果为:你好!我叫李华,今年18岁!从上面的代码可以看出,内部类B是使用static关键字声明的,也就是静态内部类。静态内部类只能访问外部类的静态变量。如果访问外部类的成员变量必须通过外部类的实例来访问,那么static里面就没有对外部类的引用了!四、方法内部类1、什么是方法?内部类是在外部类的方法中定义的。该类只能在该方法内部可见,即只能在该方法内部使用。2、方法内部类不能在外部类方法外使用,方法内部类不能使用访问控制字符和静态修饰符。3.如何使用方法内部类例如:classA{//定义类的成员变量privateStringname="李华";privateintscore=88;publicvoidtest(){//定义方法中的内部类classB{voidshow(){//访问外部类的成员变量System.out.println("姓名:"+姓名+""+"英语成绩:"+成绩+"分!");}}Bb=newB();//创建内部类对象b.show();//调用内部类方法}}publicclassp19{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubAa=newA();//创建外部类objecta.test();//调用test()方法}}输出结果为:姓名:李华英语成绩:88分!从上面的代码可以看出,在A类的test()方法中定义了一个内部类B,因为内部类B是该方法的内部类,而程序在运行时只能创建该类的实例对象方法,然后调用show()方法。方法的内部类可以访问外部类的成员变量。五、小结本文主要介绍内部类的成员内部类、静态内部类和方法内部类。成员内部类是可以定义成员变量和成员方法的类,也可以定义类。通过一个如何定义成员内部类的案例来帮助理解这种用法??。静态内部类是使用static关键字声明的,通过一个如何使用静态内部类的案例来理解这种用法??。方法的内部类是在外部类的方法中定义的。方法的内部类只能在本方法内部看到,即只能在本方法中使用。希望大家通过本文的学习对大家有所帮助!本文转载自微信公众号《Java进阶学习交流》,可通过以下二维码关注。转载本文请联系Java进阶学习交流公众号。
