一.内部类
二.匿名对象
三.匿名内部类
内部类
定义:在类的内部再定义一个或多个类,定义的类称为内部类。
内部类的创建:
①:若内部类为非静态类,则需先用外部类实例化一个对象,再用对象new一个内部类。
如下,在Car类里面在定义一个Engine,Engine就是个内部类。
public class Car {
private void star(){
System.out.println("Do something");
}
public class Engine{
public Engine(){
star();
}
}
}
public class MainClass {
public static void main(String[] args){
Car bz = new Car();
Car.Engine engine = bz.new Engine();
}
}
②:若内部类为静态类,它有限元非静态方法和类被加载,则无法使用非静态方法和类,无法用刚才的方法实例化,但可被它所隶属的类直接创建
public class Car {
private static void star(){
System.out.println("Do something");
}
public static class Engine{
public Engine(){
star();
}
}
}
public class MainClass {
public static void main(String[] args){
Car.Engine engine = new Car.Engine();
}
}
内部类的应用:内部类一般用来管理一些常用数据。
匿名对象
定义:创建的对象没有名字(即没有变量接收所创建的对象)
使用场景:一个对象被创建后只是用一次就可以被销毁时。
public class Worker {
private String name;
public Worker(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class MainClass {
public static void main(String[] args) {
//一般对象
Worker xw = new Worker("小王");
buildHouse(xw);
//匿名对象
buildHouse(new Worker("张三"));
}
public static void buildHouse(Worker worker){
System.out.println(worker.getName() + "开始工作!");
}
}
匿名内部类
1.在匿名内部类中不能定义构造函数
2.匿名内部类要么继承父类,要么实现接口
public class MainClass {
public static void main(String[] args) {
(new Worker("张三"){
private int salary = 10000;
public void showSalary(){
System.out.println(getName() + salary);
}
}).showSalary(); ;
}
}
在这里,用new Woker创建了一个匿名内部类,它继承了Woker,并新增了showSalary方法,最后可以调用showSalary方法。匿名内部类在线程中会使用到。