• java四种内部类


    内部类有成员内部类,局部内部类,匿名内部类,静态内部类。

    1,成员内部类package innerClass;

    public class InnerClassTest {
        String s1="我是外部成员变量。。";
        public static String s2="我是外部静态变量..";
        class Inner{
            void innerTest(){
                String s1="我是内部成员变量";
                String s2="我是内部成员变量";
                System.out.println(s1 +"
    "+ s2);
                System.out.println(InnerClassTest.this.s1);
            }
        }public static void main(String[] args) {
            InnerClassTest out = new InnerClassTest();
            Inner inner =  out.new Inner();
            inner.innerTest();
        }
    }


    输出:

      我是内部成员变量

    
    

      我是内部成员变量

    
    

      我是外部成员变量。。

     

    a,内部类的变量和方法会隐藏外部类的成员变量和方法,可以通过外部类的对象调用外部类变量和方法。

    b,内部类实例化通过外部类的对象来实现。

    2,局部内部类,定义在方法内部或一个作用域里面的类

    package innerClass;
    
    public class PartInnerClass {
        public String getSomething(){
            class Inner{
                String s = "我是内部类的成员变量";
            }
            return new Inner().s;
        }
        public static void main(String[] args) {
            System.out.println(new partInnerClass().getSomething());
        }
    }

    输出:

       我是内部类的成员变量

     

    3,匿名内部类,只要是一个抽象类或者接口,那么他的方法都可以在子类中实现,最常用的是多线程的实现,如:

    package innerClass;
    
    public class AnonymousInnerClass {
        public static void main(String[] args) {
            Runnable r = new Runnable(){
                public void run(){
                    System.out.println("I'm anonymous class.");
                }
            };
            Thread t = new Thread(r);
            t.start();
        }
    }

    4,静态内部类,和成员内部类有两个区别:a,实例化不依赖外部类,b,不能直接访问外部类的非静态变量和方法

    package innerClass;
    
    public class StaticInnerClass {
        int i=1;
        static int j=2;
        static class InnerClass{
            void test(){
                //静态内部类不能访问外部类的非静态方法和变量
                System.out.println(new StaticInnerClass().i);
                System.out.println(j);
            }
        }
        public static void main(String[] args) {
            //不需要依赖外部类
            InnerClass inner = new InnerClass();
            inner.test();
        }
    }
  • 相关阅读:
    static 和final
    Integer中getInteger(),valueof()
    Integer和String "+""=="方法的不同
    java中Integer常量池
    用jvm指令分析String 常量池
    多线程、线程安全
    String字符串缓冲区、StringBuffer
    TCP通信---文件上传案例、多线程文件上传
    网络通信协议、UDP通信、TCP通信
    Java线程-- 线程池
  • 原文地址:https://www.cnblogs.com/dfdi33/p/5262699.html
Copyright © 2020-2023  润新知