java基础-内部类

内部类

1:定义在方法内部

public class A {
    public A say() {
        class B extends A {
            public void test() {
                System.out.println("say hello");
            }
        }
        B b = new B();
        return b;
    }
}

2:定义在作用域内的类

3:实现了接口的匿名类

4:匿名类:扩展了非缺省构造器

5:匿名类:执行了字段初始化

6:匿名类:实例初始化构造器

内部类可以使用外围类的所有元素 注意看怎么实例化B

public class A {
    String name;

    private class B {
        public void say() {
            System.out.println(name);
        }
    }

    public static void main(String[] args) {
        A a = new A();
        a.name = "z";
        B b = a.new B();
        b.say();
    }
}

如果内部类不需要外围类的任何信息 可以static修饰

不管嵌套多少层 都可以获取外围元素

public class A {
    String name;

    private class B {
        public void say() {
            System.out.println(name);
        }

        private class C {

            void f() {
                say();
                System.out.println(name);
            }
        }
    }

    public static void main(String[] args) {
        A a = new A();
        a.name = "z";
        B b = a.new B();
        B.C c = b.new C();
        c.f();
    }
}

内部类的继承 必须传递一个B类的引用 如果不写A的构造器 则报错

class B {
    class C {}
}

public class A extends B.C {
    A(B b) {
        b.super();
    }
}

内部类实现的回调函数 此方法可以获取i++的进度 利用钩子

interface Increment {
    void incr();
}

class MyClass {
    protected int i;

    public void say() {
        System.out.println("哈哈哈");
    }

    static void f(MyClass myClass) {
        System.out.println(myClass.i);
    };
}

class Call extends MyClass {
    private class CC implements Increment {
        @Override
        public void incr() {
            i++;
        }
    }

    public Increment getInc() {
        return new CC();
    }
}

public class B {
    public static void main(String[] args) {
        Call call = new Call();
        Increment inc = call.getInc();
        inc.incr();
        inc.incr();
        inc.incr();
        inc.incr();
        MyClass.f(call);
        inc.incr();
        inc.incr();
        MyClass.f(call);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值