内部类

作者: 鉴闻俗说 | 来源:发表于2017-12-11 21:15 被阅读0次

    一 、内部类

    内部类共分为四种:静态内部类,成员内部类,局部内部类,以及匿名内部类。

    1、静态内部类:只能访问外部类的静态成员变量或者静态方法,生成静态内部类的方法如下:

    OuterClass.InnerClass inner = new OuterClass.InnerClass();
    

    2 、成员内部类:既可以访问外部类的静态成员变量或方法,也可以访问非静态成员变量或方法。生成成员内部类的方法如下:

    OuterClass.InnerClass inner = ( new OuterClass() ). new InnerClass();
    

    若想在成员内部类中访问外部类的成员变量,语法为OuterClass.this.a.

    3、局部内部类:定义在方法当中,可以访问外部类的静态与非静态的方法与成员变量,但是只能访问方法中声明为final的成员变量。

    4、匿名内部类:匿名内部类会隐式的继承一个父类或者实现一个接口。

    二、 分别给出对应的Demo

    1、静态内部类

    /**
     * 静态内部类
     *
     */
    class StaticInner
    {
        private static int a = 4;
        
        //静态内部类
        public static class Inner
        {
            public void method()
            {
                System.out.println(a);
            }
        }
    }
    
    public class StaticInnerClassTest
    {
        public static void main(String[] args)
        {
            //新建一个静态内部类的对象
            StaticInner.Inner inner = new StaticInner.Inner();
            inner.method();
        }
    }
    
    

    2、成员内部类

    /**
     *成员内部类
     *
     */
    class MemberInner
    {
        private String str = "hello";
        
        //成员内部类
        public class Inner
        {
            private String str = "hhhhh";
            public void method()
            {
                //访问外部类的成员变量
                System.out.println(MemberInner.this.str);
            }
        }
    }
    
    public class MemberInnerClass
    {
        public static void main(String[] args)
        {
            //新建一个成员内部类的对象
            MemberInner.Inner inner = (new MemberInner()).new Inner();
            inner.method();
        }
    }
    
    

    3、局部内部类

    /**
     * 局部内部类
     *
     */
    class LocalInner
    {   
        public static void name()
        {
            
        }
        public void method()
        {
            final String str = "hhh";
            //局部内部类
            class Inner
            {
                public void output()
                {
                    System.out.println(str);
                }
                
            }
            //生成局部内部类的对象,并调用其方法
            (new Inner()).output();;
        }
    }
    public class LocalInnerClass
    {
        public static void main(String[] args)
        {
            LocalInner localInner = new LocalInner();
            localInner.method();
        }
    }
    
    

    4、匿名内部类

    public class AnonumousInnerClass
    {
        @SuppressWarnings("deprecation")
        public String getDate(Date date)
        {
            return date.toLocaleString();
        }
        
        @SuppressWarnings("serial")
        public static void main(String[] args)
        {
            AnonumousInnerClass test = new AnonumousInnerClass();
            
            String str = test.getDate(new Date()
            //匿名内部类会隐式的继承一个父类或者一个接口,此处的匿名内部类继承了Date类,
            //并重写了toLocaleString()方法
            {
                @Override
                public String toLocaleString()
                {
                    return "hello world";
                }
            });
            
            System.out.println(str);
        }
    }
    

    上一篇:观察者模式(Observer)
    下一篇:io——File类

    相关文章

      网友评论

          本文标题:内部类

          本文链接:https://www.haomeiwen.com/subject/ruywixtx.html