JavaSE-内部类

内部类

在Java当中的一个类中在声明一个类就叫内部类

class Outter{
	成员变量;
	class Inner{
	}
	成员方法;
}

内部类分类

  1. (普通)成员内部类:与成员level一样,内部类中不能存在static关键字,不能够声明静态的方法、属性、静态代码块
  2. 静态(成员)内部类:使用static修饰的的成员内部类
  3. (普通)局部内部类:局部范围内有效的内部类
  4. 匿名(局部)内部类:没有名字的局部内部类

成员内部类

  1. 定义:与成员变量一样,可以声明类名,在成员内部类中可以声明属性方法
  2. 作用:
    1. 成员内部类可以无限制访问外部类的变量和方法(包括private修饰)
    2. 内部类可以有多个
    3. 成员内部类与外部类如果存在同名的成员变量或方法,优先是内部的
    4. 如果访问外部类的需要Outter.this.(变量或方法名)

成员内部类与外部类的访问

  1. 成员内部类访问外部类无限制
  2. 外部类访问内部类的成员不是无限制,需要建一个内部类的对象,通过对象来访问

成员内部类的初始化

不在类里面操作,如果是其他类要访问时,要访问内部类,首先实现外部类的实例化之后再实例化内部类

  • 在外部类对象初始化基础之上初始化内部类
Outter.Inner inner = outter.new Inner();
  • 通过外部类的成员方法获得成员内部类的对象

静态内部类

静态内部类:使用static修饰的成员内部类

class Outter{
	成员变量;
	class static Inner{
	}
	成员方法;
}

外部类不是静态也可以声明静态内部类

静态内部类要类比静态成员变量

静态内部类可以通过外部类直接调用(new Outter.Inner();)

静态内部类内部可以直接访问外部类中所有的静态变量和方法

局部内部类

局部内部类:定义在代码块、方法体等的类

局部内部类要类比局部成员变量

不能够有public、protected、private以及static修饰

class Outter{
	public void func(){
		class Inner{
		}
	}
}

局部内部类只是在一个方法或区域里起作用

匿名内部类

匿名内部类:没有名字的局部内部类

必须要继承一个父类或者实现一个接口

new 父类构造方法(){
	//重写一个函数
	修饰符 返回参数类型 方法名(参数列表){
	}
}

匿名内部类与局部内部类的区别:局部的位置不同

匿名内部类当中不能够有静态属性静态方法

匿名内部类不需要新建一个类,而是通过匿名的形式实现方法的重写

匿名内部类尤其对Android开发,例如:监听、鼠标事件、键盘、触屏输入

内部类的总结

  1. 每个内部类都可以独立的继承或实现一个接口,而外部类也可以继承一个直接父类(多继承)
  2. 通过外部类可以实现外界的隐藏(封装)
  3. 内部类可以无限的使用外部类的成员变量(包括私有),不用生成外部类的对象
  4. 匿名内部类可以简化代码的编写,方便编写时间驱动的程序
  5. 成员内部类和静态内部类可以对比成员变量和静态变量局部内部类和匿名内部类可以对比局部变量

猜你喜欢

转载自blog.csdn.net/JavaDestiny/article/details/85042647