一、内部类的分类
内部类的种类:成员内部类、静态内部类、局部内部类、匿名内部类
二、内部类-匿名内部类(重点)
应用场景:某个类或者某个类对象只应用一次,就可以使用匿名内部类,不必去先创建具体的类继承父类或者实现接口,再创建对象。 匿名内部类能够使你的代码更加简洁。 语法:
父类名(接口名) 对象名 = new 父类名(接口名){
重写的方法;
}
举例: 接口Animal,具有play()方法
/**
* 新建一个接口Animal
* @author z
*
*/
public interface Animal {
void play();
}
想实现Animal子类对象实例化,又不想新建一个子类,可以使用匿名内部类
public class Test {
public static void main(String[] args) {
//非匿名常规方法
//1.新建一个Java文件-为Animal类创建子类Cat
//2.新建一个Java文件-在main方法中实例化子类Cat的对象cat
//匿名内部类
//在main方法中创建Animal类的匿名子类,同时实例化子类的对象cat
//匿名子类1,实例化子类的对象cat
Animal cat = new Animal() {
@Override
public void play() {
System.out.println("猫吃鱼");
}
};
//匿名子类2,实例化子类的对象dog
Animal dog = new Animal() {
@Override
public void play() {
System.out.println("狗吃肉");
}
};
//匿名子类3,实例化子类的对象ultraman
Animal ultraman = new Animal() {
@Override
public void play() {
System.out.println("奥特曼打小怪兽");
}
};
//调用这些匿名子类对象的play方法
cat.play();
dog.play();
ultraman.play();
}
}
三、内部类-成员内部类、局部内部类(了解)
成员内部类:类里再写类 局部内部类:方法里写类
举例: 创建类
public class Teacher {
/**
* 成员内部类
* 在类Teacher里创建成员内部类Student
* @author z
*
*/
public class Student{
public void study() {
System.out.println("学习");
}
}
public void teach() {
/**
* 局部内部类
* 在方法teach里创建类Son
* 方法里创建的类不能用public修饰,因为只能在该方法中被调用
* @author z
*
*/
class Son {
public void play() {
System.out.println("玩耍");
}
}
Son son = new Son();
son.play();
}
}
实例化对象
public class Test {
public static void main(String[] args) {
//创建成员内部类对象
Student stu = new Teacher().new Student();
stu.study();
//调用局部内部类
Teacher t = new Teacher();
t.teach();
}
}
|