Java 内部类,常用api
一.内部类
1.内部类概述
- 内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)。
public class People{
// *内部类
* public class Heart{}
}
内部类的使用场景
场景:当一个事物的内部,还有一个部分需要一个完整的结构进行描述时。
基本作用
-
内部类通常可以方便访问外部类的成员,包括私有的成员。
-
内部类提供了更好的封装性,内部类本身就可以用private ,protectecd等修饰,封装性可以做更多控制。
2.内部类:静态内部类
有static修饰,属于外部类本身。
它的特点和使用与普通类是完全一样的,类有的成分它都有,只是位置在别人里面而已。
public class Outer{
// 静态成员内部类
public static class Inner{}
}
静态内部类创建对象的格式:
格式:外部类名.内部类名 对象名 = new 外部类名.内部类构造器;
范例:Outer.Inner in = new Outer.Inner();
3.内部类:成员内部类
无static修饰,属于外部类的对象。
JDK16之前,成员内部类中不能定义静态成员,JDK 16开始也可以定义静态成员了。
public class Outer {
// *成员内部类
* public class Inner {}
}
成员内部类创建对象的格式:
格式:外部类名.内部类名 对象名 = new 外部类构造器.new 内部类构造器();
范例:Outer.Inner in = new Outer().new Inner();
4.内部类:局部内部类
局部内部类放在方法、代码块、构造器等执行体中。
局部内部类的类文件名为: 外部类$N内部类.class。
5.内部类:匿名内部类概述★
匿名内部类:
本质上是一个没有名字的局部内部类。
作用:方便创建子类对象,最终目的是为了简化代码编写。
格式:
new 类|抽象类名|或者接口名() {
重写方法;
};
Employee a = new Employee() {public void work() {}};
a. work();
特点总结:
-
匿名内部类是一个没有名字的内部类,同时也代表一个对象。
-
匿名内部类产生的对象类型,相当于是当前new的那个的类型的子类类型。
public class Test {
public static void main(String[] args) {
Animal a = new Animal(){
@Override
public void run() {
System.out.println("老虎会吃人~~~");
}
};
a.run();
}
}
// class Tiger extends Animal{
// @Override
// public void run() {
// System.out.println("老虎会吃人~~~");
// }
// }
abstract class Animal{
public abstract void run();
}
6.匿名内部类常见使用形式
/**
掌握匿名内部类的使用形式(语法)
*/
public class Test2 {
public static void main(String[] args) {
Swimming s = new Swimming() {
@Override
public void swim() {
System.out.println("学生开始游泳~~~");
}
};
go(s);
System.out.println("-----------------------");
go(new <