Android开发基础----Java基础(9)

学习内容

  • 内部类
  • 匿名内部类与匿名对象
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()+"开始工作");
    }
}

你可能感兴趣的:(Android开发基础----Java基础(9))