栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java内部类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java内部类

文章目录
  • 内部类
    • 1.什么是内部类
    • 2.内部类分类
    • 3.实例内部类
    • 4.静态内部类
    • 5.生成内部类对象
      • 5.1生成实例内部类对象
      • 5.2生成静态内部类对象

内部类 1.什么是内部类

如果一个类定义在另外一个类的内部,那么这个类就会被称为内部类。一个内部类和普通类一样,可以有自己的实例变量,构造方法,实例方法等等,只是被嵌套在了其他类里面而已。举个栗子,我们设计了一个A类只想让B类使用,如果设计成外部类,其他类就可以随意使用了,这个时候就可以把A类设计成B类的内部类。如下:

2.内部类分类

内部类有实例内部类 静态内部类 两类。内部类有static关键字修饰就称为静态内部类。

3.实例内部类

设计一个实例内部类如下:

public class OutClass {
    private int a;
    class InnerClass {
        private int b;
        void fun() {
            a = 10;
            b = 20;
        }
    }
}

在实例内部类中定义一个函数fun,毫无疑问,函数中可以访问变量b,因为b是自己的实例变量,有当前类隐含的this,当然可以随便访问。同时也观察到,在该函数中也可以访问外部类的变量a,那么也是因为有当前类隐含的this吗?我们先把this关键字加上试试。

发现出现无法解析符号“a”的错误。这是因为当实例内部类访问外部类成员时提供的是外部类对象的this。

4.静态内部类

设计一个静态内部类如下:

public class OutClass {
    private int a;

    static class InnerClass {
        private int b;

        void fun() {
            this.b = 20;
        }
    }
}

InnerClass被设计成了OutClass的一个静态内部类,在fun函数中可以访问自己的成员变量b,因为会提供默认的this。那么还可以像实例内部类一样可以访问外部类的成员吗?显然是不可以的,因为静态内部类只可以提供当前类的this,不可以提供外部类的this了。

因此,当我们设计内部类的时候,如果想内部类可以随意访问外部类成员的时候,就把内部类定义为实例内部类;如果不想内部类可以随意访问外部类成员的时候,就把内部类定义为静态内部类。

5.生成内部类对象 5.1生成实例内部类对象

OutClass类:

public class OutClass {
    private int a;
    class InnerClass {
        private int b;
        void fun() {
            OutClass.this.a = 10;
            this.b = 20;
        }
    }
}

TestDemo类:

public class TestDemo {
    public static void main(String[] args) {
        OutClass outClass = new OutClass();//生成外部类对象
        OutClass.InnerClass innerClass = outClass.new InnerClass();
    }
}

实例内部类对象的生成,需要先生成外部类对象,然后借助外部类对象再去new对象。还需要指定生成哪一个内部类的引用变量去接受它,为什么需要指定是哪一个内部类的呢?因为它有可能是张三家的,也有可能是李四家的,在这里是OutClass类家的。

5.2生成静态内部类对象

OutClass类:

public class OutClass {
    private int a;

    static class InnerClass {
        private int b;

        void fun() {
            this.b = 20;
        }
    }
}

TestDemo类:

public class TestDemo {
    public static void main(String[] args) {
        OutClass.InnerClass innerClass = new OutClass.InnerClass();
    }
}

静态内部类对象的生成,不需要借助外部类的对象,但需要指明是哪一个外部类的,用外部类.调用静态内部类的构造方法,同时也需要指定生成哪一个内部类的引用变量去接受它。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/600780.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号