Java教程

Java内部类

本文主要是介绍Java内部类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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);
    }
}
这篇关于Java内部类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!