ICode9

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

Java内部类

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

标签: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

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

ICode9版权所有