Java学习——内部类

内部类

一,成员内部类(包括静态内部类和非静态内部类)
  • 非静态内部类可以直接访问外部类的成员,反之则不行
  • 非静态内部类不能有静态方法、静态代码块、静态初始化块
  • 外部类的静态方法、静态代码块不能访问非静态内部类,包括不能使用非静态内部类定义变量、创建实例
  • 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();
}

局部内部类

  • 就是在一个方法中有类,该类只为该方法提供服务,很少用
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容