Java内部类

本文探讨了Java内部类的静态特性、访问外部类成员的透明性,以及内部类的作用,包括继承和实现接口、维护状态独立性及多态示例。通过实例展示了如何利用内部类实现不同功能和设计模式。

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

1.接口内部的类:接口不能实例化,内部接口就需要定义成静态的。内部类接口不管有没有声明static,都是静态的。类里面包含两部分:一部分是固定的,另一部分是可变的,而这个可变的部分就变成了接口。

class B3 {
    interface A {
        String a();
    }
}

public class Test19 {
    public static void main(String[] args) {
        B3.A a1 = new B3.A() {
            @Override
            public String a() {
                return "a()";
            }
        };
        System.out.println(a1.a());
    }
}

2.从多层嵌套类中访问外部类的成员:一个内部类被嵌套多少层并不重要,它能透明的访问所有它所嵌入的外部类的所有成员。如果有多个外部类具有同名同参的方法,则会调用最里层的方法,如果想调用上一层方法则必须要指定他的类名.this.方法名。".new"语法可以不必在调用构造器是限定类名。

class A {
    private void a() {
    }

    class B {
        private void b() {
        }

        public class C {
            void c() {
                b();
                a();
            }
        }
    }
}

public class Test20 {
    public static void main(String[] args) {
        A a1 = new A();
        A.B ab = a1.new B();
        A.B.C abc = ab.new C();
        abc.c();
    }
}

3.为什么需要内部类:内部类继承自某个类或实现某个接口,内部类的代码操作创建它的外部类的对象。每个内部类都可以独立于实现进行继承,因此外部类是否已经继承了实现并不重要。 内部类的特性:内部类可以有多个实例,每个实例都有自己的状态信息,并且独立于其外部类对象的信息;在单个外部类中,可以让多个内部类以不同的方式实现相同的接口,或从相同的类继承;创建内部类对象的时刻并不依赖于外围类对象的创建。

interface A4 {
}

interface B4 {
}

class C4 implements A4, B4 {
}

class D4 implements A4 {
    B4 b4() {
        return new B4() {
        };
    }
}

public class Test21 {
    static void testA(A4 a) {
    }

    static void testB(B4 b) {
    }

    public static void main(String[] args) {
        C4 c = new C4();
        D4 d = new D4();
        testA(c);
        testA(d);
        testB(c);
        testB(d.b4());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值