zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    Flex 和JavaScript 交互(带参)
    dos创建快捷方式
    IE的onunload事件里调用DWR
    使用VS2008开发OPC客户端程序
    实时库GEHistorian的一些问题记录
    SQL SERVER中,把一个表中的数据导入到另一个表中
    SQLSERVER 触发器
    SqlServer数据复制出现的问题与处理
    了解Log.Debug 或 log4net
    VS2008应用程序部署时将Framework3.5打包到安装包中
  • 原文地址:https://www.cnblogs.com/dfdi33/p/5262699.html
Copyright © 2011-2022 走看看