学习内容
- 内部类
- 匿名内部类与匿名对象
1.内部类
- 尽量在一个文件里面定义一个类
- 如果需要在类的内部定义一个类,那这各类救市内部类
- 我们如果要用内部类,原因:希望封装对应的功能,这些功能是为我们不希望直接暴露给外部的
- 内部类是外部类的一个成员
- 内部类可以直接访问外部类的数据
- 外部类无法调用内部类的数据
- Car bz = new Car();
- Car.Engine engine = bz.new Engine();
- 内部类有相应的修饰符:public、protected、final,外部类只能使用public来修饰
- 内部类分类:普通内部类——属于对象,必须使用对象来调用;静态内部类——属于类,必须用类来调用,而且静态内部类不能调用非静态数据
public class Car {
private int wheels;
public void start(){
wheels = 4;
//内部使用内部类
new Engine();
}
protected static class Engine{
public int a;
public Engine(){
}
}
}
2.匿名内部类与匿名对象
class Woker{
private String name;
public Woker(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class MIniWoker extends Woker{
public MIniWoker(String name) {
super(name);
}
}
public class MyClass {
public static void main(String[] args) {
//显示创建,显示对象
//如果需要多次使用这个对象用此方法
Woker xw = new Woker("小王");
buildHouse(xw);
xw.setName("小王plus");
//匿名对象
//这个对象只需要使用一次
buildHouse(new Woker("张三"));
//匿名类:不显示创建这个类
buildHouse(new Woker("miniWoker"){
//匿名类的具体实现,匿名内部类不能申明构造方法,
//使用匿名内部类必须满足两点:
//1.这个类要么继承某个父类;
//2.要么实现某个接口
public int salary;
public void showMoney(){
System.out.println(getName()+"的工钱为100"+salary);
}
});
}
public static void buildHouse(Woker a){
System.out.println(a.getName()+"开始工作");
}
}