java-内部类介绍

内部类(Nested Class) 嵌套类:

(1)静态内部类

(2)非静态内部类:

  • 普通内部类(成员内部类):在一个外部类中直接定义的内部类。
  • 匿名内部类:
  • 方法内部类:在一个方法(外部类中的方法)或代码块中定义的内部类。 

内部类仍然是一个独立的类,在编译之后内部类会被单独编译成独立的.class文件,但是前面冠以外部类的类名和$符号。

内部类可以使用修饰符(public ,protected,default,private)。

 通过代码了解一下:

package com.etc;

import java.util.Date;

@SuppressWarnings("all")
public class NestedClassDemo {
    public static void main(String[] args) {

        Test4 test=new Test4();
        test.test();
        //不相关的内部类调用及实例化
        Test4.Test t1=new Test4.Test();
        //成员内部类的实例必须借助外部类
        Test4.Test2 t2=test.new Test2();
        System.out.println("不相关内部类:"+t1.getClass());
        System.out.println("成员内部类:"+t2.getClass());
    }
}

@SuppressWarnings("all")
class Test4{

    static int a=10;
    int b=20;
    //静态内部类
    static class Test{
        private void printA() {
            System.out.println(a);
            //静态内部类中不能调用外部类的普通成员
            //    System.out.println(b);
        }
    }
    //普通内部类 
    class Test2{
        //成员内部类中不能有静态的成员,除非声明为final,并且只能是编译器可以确定值的常量表达式
        int a=10;
        final static int b=20;
        /*final static Date date=new Date();*/
    }

    //方法内部类,局部内部类
    public void test() {

        class Test3{

        }
        //匿名内部类也可以放在方法内部类里面
        Runnable run=new Runnable() {
            @Override
            public void run() {
                System.out.println("测试1");
            }
        };
    }

    //定义了匿名内部类的类体,同时创建了一个匿名内部类的实例。
    Runnable run=new Runnable() {
        @Override
        public void run() {
            System.out.println("测试2");
        }
    };
}

运行效果截图:

扫描二维码关注公众号,回复: 6209124 查看本文章

ps:文章待完善,后续补全。

猜你喜欢

转载自www.cnblogs.com/weekstart/p/10852164.html