ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java内部类

2021-09-05 23:58:30  阅读:139  来源: 互联网

标签:Test3 Java 内部 void public new class


1.使用.this与.new

如果需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟圆点和this。

public class Test3 {
    void f() {
        System.out.println("f()");
    }

    public class A {
        public Test3 outer() {
            return Test3.this;
        }
    }

    public A inner() {
        return new A();
    }

    public static void main(String[] args) {
        Test3 t = new Test3();
        Test3.A ta = t.inner();
        ta.outer().f();
    }
}

创建某个内部类的对象,必须在new表达式中提供其他外部类对象的引用,这就需要.new语法,必须使用外部类的对象来创建内部类。创建的是静态内部类,就不需要对外部类对象的引用。

public class Test4 {
    public class Inner {
    }

    public static void main(String[] args) {
        Test4 t = new Test4();
        Test4.Inner ti = t.new Inner();
    }
}

2.内部类与向上转型:内部类向上转型为一个接口的时候,实现了某个接口的对象,得到了对此接口的引用,将内部类向上转型为父类。使用内部类去继承类,或是实现接口,可以很好的阻止外部的访问。

interface A1 {
    void a();
}

class B {
    private class C implements A1 {
        public void a() {
            System.out.println("a()");
        }
    }

    public C getC() {
        return new C();
    }
}

public class Test5 {
    public static void main(String[] args) {
        B b = new B();
        A1 a1 = b.getC();
        a1.a();
    }
}

3.在方法和作用域内的内部类:可以在一个方法里,或者任意的作用域内定义内部类:实现了某类型的接口,就可以创建并返回对其的引用。定义内部类的方式:①一个定义在方法中的类。②一个定义在作用域的类。③一个实现了接口的匿名类(匿名类不能有构造器)。

public class Test6 {
    public static void main(String[] args) {
        class A2 {
            int x;
        }
        class B2 extends A2 {
            int y;
        }
        B2 b = new B2();
        b.x = 1;
        b.y = 2;
        System.out.println("x=" + b.x);
        System.out.println("y=" + b.y);
    }
}

标签:Test3,Java,内部,void,public,new,class
来源: https://blog.csdn.net/IXingFu/article/details/120120555

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有