内部类

内部类

  1. 外部类不能直接访问内部类,内部类成员可以访问外部类的私有数据;
  2. 外部类不可以使用"private/protected/static"修饰符

1.成员内部类

  1. 区别:

    使用static修饰的成员内部类是静态内部类,不使用static修饰的成员内部类是非静态内部类;

  2. static关键字的作用

    1. 外部类的外一层是包不能用static修饰;内部类的外一层是外部类能用static修饰;
    2. 把内部类变成外部类的类相关,而不是外部类的实例(对象)相关;
  3. 查找变量顺序

    1. 内部类局部变量
    2. 内部类成员变量
    3. 外部类成员变量
  4. 保存文件形式

    1. 外部类:外部类名.class

    2. 内部类:外部类名&内部类名.class

1.非静态内部类
  1. 外部类访问内部类:
    1. 在外部类方法内新建内部类访问内部类,main方法不能新建非静态内部类对象(编译错误)
    2. 可以访问内部类方法,但是不能访问内部类变量(编译出错);
  2. 内部类访问外部类:都行
  3. 非静态内部类不能有静态方法/静态成员变量/静态初始化块
2.静态内部类
  1. 外部类访问内部类:

    1. 在外部类方法内或main内都能新建对象或者直接内部类名调用;
    2. 可以访问内部类变量,但是不能访问内部类方法(编译出错);
  2. 内部类访问外部类:

    静态内部类不能访问外部类的实例成员,只能访问外部类的类成员;

    静态内部类对象只持有外部类的类引用,没有持有外部类的对象引用

  3. 静态内部类可以包含静态成员,也可以包含非静态成员;

  • 接口内部类[了解即可]
    1. 只能使用public static修饰接口内部类;
    2. 接口的作用是定义一个公共规范(暴露出来供大家使用),如果把这个接口定义成一个内部接口就没有意义了;

2.局部内部类

3.匿名内部类

  1. 要求:

    1. 必须且只能实现或继承一个类;
    2. 继承只是单纯的新建类+重写需要用到的内容;
    3. 匿名内部类不能是抽象类(没有意义),不能定义构造器(没有类名);
    4. 匿名内部类是:需要创建并使用一次的类;
  2. 书写格式

    1. 继承:

      new 父类([参数]){
          重写
      }
      
    2. 实现:

      new 实现类(){
      	重写
      }
      
  3. 匿名内部类使用外部类成员内部类时,成员内部类必须要被final修饰,java1.8以后自动在编译时在成员变量前添加final

  4. 案例:

    1. 父类

      public class Father {
      	public Father(String name) {
      		super();
      		Name = name;
      	}
          省略:有参无参构造器
      	private String Name;
      	private Integer age;
      	private String Book;
      	省略:get/set方法
      }
      
    2. 外部类:

      public class Test{
      	public void father() {
      		//java1.8后自动在成员变量前加上final,再次复制则编译错误
      		String book="数学";
      		//book="12";
      		Father father = new Father("刘备") {
      			public Integer getAge() {
      				return 10;
      			}
      			public String getBook() {
      				return book;
      			}
      		};
      		System.out.println("姓名:"+father.getName()+",年龄:"+father.getAge()+",书籍:"+father.getBook());
      	}
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值