Java面向对象-实例内部类和静态内部类分析

本文详细介绍了Java中的实例内部类和静态内部类的区别及用法。包括它们的特点、创建方式、成员访问规则等,并通过具体代码示例进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例内部类

没有使用static修饰的内部类,说明内部类属于外部类的对象,不属于外部类本身。
特点:
1、创建实例内部类前,必须存在外部类对象,通过外部类镀锌创建内部类对象(当存在内部类对象时,一定存在外部类对象)
Outter.Inner in = new Outter().new Inner();
2、实例内部类的实例自动持有外部类的实例的引用,内部类可以直接访问外部类成员
3、外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问
4、实例内部类中不能定义静态成员,只能定义实例成员
5、如果实例内部类和外部类存在同名的字段或方法abc,那么在内部类中this.abc表示访问内部类成员

// 外部类
class Outter
{
    String name = "Outter.name";
    public void xxoo()
    {
        System.out.println(this.new Inner().age);
    }

    // 实例内部类
    class Inner
    {
        int age = 18;
        String name = "Inner.name";
        public void test()
        {
            String name = "Local.name";
            System.out.println(name);
            System.out.println(this.name);
            System.out.println(Outer.this.name);
        }
    }
}

静态内部类

使用static修饰内部类
特点:
1、静态内部类的实例不会自动持有外部类的特定实例的引用,在创建内部类的实例时,不必创建外部类的实例
Outter.Inner in = new Outter.Inner();
2、静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员,必须通过外部类的实例去访问
3、在静态内部类中可以定义静态成员和实例成员
4、测试类可以通过完整的类名直接访问静态内部类的静态成员

// 外部类
class Outter
{
    String name = "Outter.name";
    static String name2 = "name2";

    // 静态内部类
    static class Inner
    {
        static int age = 18;
        String name1 = "Inner.name";
        public void test()
        {
            String name = "Local.name";

            System.out.println(name2);
            System.out.println(new Outter().name1);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值