美文网首页
Java学习——内部类

Java学习——内部类

作者: 啦咔_e297 | 来源:发表于2019-10-04 18:39 被阅读0次

    内部类

    一,成员内部类(包括静态内部类和非静态内部类)
    • 非静态内部类可以直接访问外部类的成员,反之则不行
    • 非静态内部类不能有静态方法、静态代码块、静态初始化块
    • 外部类的静态方法、静态代码块不能访问非静态内部类,包括不能使用非静态内部类定义变量、创建实例
    • Outer.Inner inner =new Outer().new Inner();在创建内部类对象时先创建外部类对象,依托外部类
    • 成员访问要点
      1.Outer.this.age 访问外部类属性
      2.this.age 访问内部类属性
      3.age 访问内部类的局部变量
    package com.oop;
    
    /*
     * 测试非静态内部类
     * */
     
    public class TestInnerClass {
        public static void main(String[] args) {
            Outer.Inner inner =new Outer().new Inner();
            inner.show();
        }
    
    }
    
    class Outer{
        private int age=10;
        public void testOuter(){
            System.out.println("Outer.testOuter()");
        }
        
        class Inner{ //成员内部类(加static就变为静态内部类,不加则是非静态内部类)
            //可以直接访问外部类的方法,为外部类提供帮助的
            int age=20;
            public void show(){
                int age=30;
                System.out.println("外部类的成员变量"+Outer.this.age);
                System.out.println("内部类的成员变量"+this.age);
                System.out.println("局部变量"+age);
            }
        }
    }
    
    静态内部类
    package com.oop;
    /*
     * 测试静态内部类
     */
    public class TestStaticInnerClass {
        private void mian() {
            // TODO Auto-generated method stub
            Outer2.Inner2 inner=new Outer2.Inner2();
        }
    }
    
    class Outer2{
        static class Inner2{
            
        }
    }
    

    匿名内部类

    • 匿名内部类只会被使用一次
    package com.oop;
    
    public class TestAnonymousInnerClass {
        public static void test(A a){
            a.aa();
        }
        public static void main(String[] args) {
            TestAnonymousInnerClass.test(new A(){
    
                @Override
                public void aa() {
                    // TODO Auto-generated method stub
                    System.out.println("匿名内部类");
                }
                
            });
        }
    }
    
    interface A{
        void aa();
    }
    

    局部内部类

    • 就是在一个方法中有类,该类只为该方法提供服务,很少用

    相关文章

      网友评论

          本文标题:Java学习——内部类

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