资讯详情

资讯详情

内部类的详细介绍

认识内部类内部类是定义在另一个类内部的类它就像外部类的一个 “成员”可以访问外部类的所有成员而外部类也能访问内部类的成员。为了更好的了解到内部类我们可以举个例子理解外部类是 “房子”内部类是 “房子里的房间”—— 房间属于房子能使用房子里的所有东西房子也能控制房间的使用。内部类的分类1.实例内部类publicclassHouse{publicStringaddressChina;publicvoidinhome(){System.out.println(欢迎进来);}publicintarea100;classRoom{publicStringname主卧;publicvoidshow(){System.out.println(房子地址address);System.out.println(房子面积area㎡);System.out.println(房间名称name);//内部类可以直接访问外部类成员inhome()//内部类可以直接访问外部类的方法}}}由此我们可以看出来内部类可以直接访问外部类的成员变量和方法既然内部类可以访问外部类那么外部类如何去访问内部类呢publicclassHouse{publicStringaddressChina;publicvoidinhome(){System.out.println(欢迎进来);}publicintarea100;classRoom{publicStringname主卧;publicvoidshow(){inhome();System.out.println(房子地址address);System.out.println(房子面积area㎡);System.out.println(房间名称name);}}//在外部类实现一个方法用来调用内部类publicvoidenterhome(){RoomroomnewRoom();// 外部类内部创建内部类对象语法和普通类一样room.show();System.out.println(进入room.name);}}在测试类中实现调用内部类成员//在外部类 的外部 创建内部类的方法publicclassTest{publicstaticvoidmain(String[]args){HousehousenewHouse();//1.先创建外部类House.Roomroomhouse.newRoom();// 2. 通过外部类对象创建内部类对象房间语法外部类.内部类 变量名 外部类对象.new 内部类();room.show();house.enterhome();}}2.静态内部类用static修饰的内部类属于外部类本身而非外部类对象。只能访问外部类的静态成员创建时无需外部类对象。publicclassEarth{publicstaticStringnameearth;publicintradius6371;publicstaticclassMoon{publicStringMoomname月球;publicvoidshow(){System.out.println(围绕着Earth.name);//可以直接引用静态的外部类的成员//System.out.println(Earth的半经Earth.radius);//不能访问非静态的外部类成员}}}用static修饰的内部类属于外部类本身而非外部类对象。接下来我们尝试在外部类中调用内部类 的成员publicclassEarth{publicstaticStringnameearth;publicintradius6371;publicstaticclassMoon{publicStringMoomname月球;publicvoidshow(){EarthearthnewEarth();earth.func();//内部类访问外部类的成员方法System.out.println(围绕着Earth.name);//可以直接引用静态的外部类的成员//System.out.println(Earth的半经Earth.radius);//不能访问非静态的外部类成员}//在外部类中调用内部类得先实例化publicvoidtestMoon(){MoonmoonnewMoon();moon.show();}}}最后就是在外部类的外面访问内部类publicclassTest{publicstaticvoidmain(String[]args){// 关键创建静态内部类对象不用先new Earth()// 语法外部类.静态内部类 变量名 new 外部类.静态内部类();Earth.MoonmoonnewEarth.Moon();moon.show();}}3局部内部类定义在外部类的方法 / 代码块内部类似局部变量。作用域仅限于当前方法 / 代码块外部无法直接访问。publicclassLoInnerClass{publicvoidfunc(){publicinta10;System.out.println(使用了外部方法);}publicvoidtest(){System.out.println(aa);classinnerclass{//内部类调用外部类的方法publicvoidiusefunc(){func();}}}publicvoidousefunc(){test();//局部内部类中无法直接访问iusefunc()中的方法}}接下来我们尝试在外部类中调用内部类 的成员publicclassTest2{publicstaticvoidmain(String[]args){LoInnerClassloInnerClassnewLoInnerClass();LoInnerClass.func();//外部类中也无法直接调用内部类中的方法}}4.匿名内部类没有类名的内部类通常用于快速创建 “只使用一次” 的类比如实现接口、继承抽象类。本质是一个 “一次性” 的子类 / 实现类对象语法上是表达式。// 定义一个接口interfaceGreeting{voidsayHello();}publicclassTest{publicclassAnonymousInnerTest{publicstaticvoidmain(String[]args){// 匿名内部类直接实现Greeting接口无需定义具体类GreetinggreetingnewGreeting(){OverridepublicvoidsayHello(){System.out.println(你好内部类);}};greeting.sayHello();// 输出你好内部类}}}默认情况下匿名内部类无法被外部类调用因此无法被外部类的外部调用小结1.写成员内部类的核心步骤先定义外部类含私有成员→ 在外部类成员位置定义内部类访问外部类成员→ 编写外部类方法 / 测试代码使用内部类2.成员内部类的关键语法外部类外部创建对象需用外部类对象.new 内部类()内部类可直接访问外部类所有成员3.编写思维核心先明确 “容器 - 组件” 的依赖关系再分步实现、逐步验证重点体现内部类的封装性和访问特性。类别内部类所在的位置内部类如何访问外部类成员内部类如何访问外部类方法外部类如何访问内部类外部类的外部访问内部类实例内部类外部类里面直接访问实例化然后使用对象调用先创建一个外部方法再将内部类实例化先创建外部类的实例化再通过外部类对象创建内部类对象静态内部类外部类里面用static修饰静态成员方法直接访问非静态的成员不能访问实例化然后使用对象调用先创建一个外部方法再将内部类实例化通过外部类名.内部类名创建内部类对象局部内部类外部类中的方法中直接调用在内部类方法中调用无法调用内部类无法调用内部类匿名内部类外部类中一般不使用后面的访问---
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →