首页 > 学院 > 开发设计 > 正文

内部类

2019-11-08 02:06:51
字体:
来源:转载
供稿:网友

概念:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类

内部类的主要作用如下:

内部类提供了更好的封装,把内部类隐藏在外部类之中,不允许同一个包中的其他文件访问该类。内部类的方法可以直接访问外部类的所有数据,包括私有数据。内部类所实现的功能外部类同样可以实现,只是有时内部类更方便。 问:内部类有几种呢?

内部类可分为以下几种:

成员内部类静态内部类方法内部类匿名内部类

代码如下:

public class HelloWorld { // 内部类Inner,类Inner在类HelloWorld的内部 public class Inner { // 内部类的方法 public void show() { System.out.PRintln("welcome to imooc!"); } } public static void main(String[] args) { // 创建外部类对象 HelloWorld hello = new HelloWorld(); // 创建内部类对象 Inner i = hello.new Inner(); // 调用内部类对象的方法 i.show(); }}

注意如何创建内部类对象

Inner i=hello.new Inner();

内部类 从上面的代码中我们可以看到,成员内部类的使用方法:

1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等

2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

4、 编译上面的程序后,会发现产生了两个 .class 文件

友情提示:

外部类不能直接访问内部类的成员或方法,应创建内部类的对象来访问其成员或方法如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。如: 这里写图片描述

静态内部类 静态内部类是 static 修饰的内部类,这种内部类的特点是: 1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员 的方式访问如果外部类的静态成员于内部类的成员相同,可通过 “类名,静态成员”访问外部成员的静态成员。如果不相同,可直接通过成员名调用外部类的静态成员创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名=new 内部类();package com.zhongli;public class HelloWorld { // 外部类中的静态变量score private static int score = 84; int a=96; // 创建静态内部类 public static class SInner { // 内部类中的变量score int score = 91; public void show() { System.out.println("访问外部类的非静态成员"+new HelloWorld().a); System.out.println("访问外部类中的score:" + HelloWorld.score); System.out.println("访问内部类中的score:" + score); } } // 测试静态内部类 public static void main(String[] args) { // 直接创建内部类的对象 SInner si=new SInner(); // 调用show方法 si.show(); }}

结果为: 访问外部类的非静态成员96 访问外部类中的score:84 访问内部类中的score:91


方法内部类: 方法内部类就是内部类定义在类的方法中,方法内部类只能在该方法中可见,即只能在该方法中使用。

package com.zhongli;//外部类public class HelloWorld { private String name = "爱慕课"; // 外部类中的show方法 public void show() { // 定义方法内部类 class MInner { int score = 83; public int getScore() { return score + 10; } } // 创建方法内部类的对象 MInner mi=new MInner(); // 调用内部类的方法 int newScore=mi.getScore(); System.out.println("姓名:" + name + "/n加分后的成绩:" + newScore); } // 测试方法内部类 public static void main(String[] args) { // 创建外部类的对象 HelloWorld mo=new HelloWorld(); // 调用外部类的方法 mo.show(); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表