1.抽象类与接口
1.1.抽象方法,abstract修饰的方法,特点如下,
- 抽象方法是没有方法体,abstract Double getArea();
- 抽象方法必须定义在抽象类中
- 子类必须去覆盖该方法,抽象方法不能是private,不能使用final修饰,不能同时使用static修饰
1.2.抽象类
- 抽象类是不能直接创建对象的(没有方法体)
- 抽象类里面可以有抽象方法和非抽象方法,非抽象方法黑子类调用的
- 子类没有去覆盖抽象方法,把子类也变成抽象类
- 构造方法不能定义为私有的(子类要继承)
- 抽象类不能使用final去修饰
1.3.抽象类的命名一般在前面加上Abstract,抽象类必须有子类才有意义
2.接口,是一种规范,使用抽象方法定义一组功能。方法必须被实现。
2.1.接口的命名前面加 I,结尾加上able。接口是特殊的抽象类。class文件,方法前面自动加上public abstract。
- 接口是没有构造器的,接口不能被创建的。
- 接口中定义的变量都是全局的静态常量。反编译变量之后可以看到 public static final
- 接口中定义的方法都是公共的抽象方法(class文件,方法前面自动加上public abstract)
- 接口当中可以定义内部类,内部类也是public abstract
- 类是单继承,接口可以多继承
2.3.接口的实现
- 在实现类当中,必须覆盖接口中的方法,必须是public的。
- 接口也是父类,编译的时候看左边,运行的时候看右边。
- 面向接口编程,多态
2.4.接口和抽象类的区别
- 相同点
- 都是被其它类实现或继承
- 都不能被实例化
- 都可以定义抽象方法,定义的抽象方法,子类必须覆盖
- 不同点
- 接口中没有构造器,抽象类中有构造器
- 抽象类可以有抽象方法和普通方法,接口中只能是抽象方法,不能有普通方法。(带有方法体的是普通方法)
- 接口中的变量默认public static final 静态常量
- 接口中的方法是public abstract 方法名
3.面向接口编程,把实现类的对象赋值给接口类型的变量(多态)
- 多态的好处,屏蔽了不同类的之间的实现差异,从而达到通用编程
4.内部类,
- 增强封装,不允许其他类使用
- 增加了代码的维护性
- 内部类可以直接访问外部类的成员
4.1内部类的划分
- 实例内部类:定义在类中的内部类,没有任何修饰符
- 静态内部类:static修饰的内部类
- 局部内部类:定义在方法中的内部类
- 匿名内部类:属于局部内部类中的一种
4.2.实例内部类,属于对象的内部类,不属于类的,不能用static修饰
- 使用内部类必须创建外部类
- 内部类可以直接访问外部类的成员
- 在内部类中不能有静态成员,内部类是属于外部类的成员
4.3.静态内部类
- 静态内部类不需要创建外部对象
- 在静态内部类中,是没有外部类的引用的
- 静态内部类可以使用外部类的静态成员
4.3.局部内部类
- 不能使用一些修饰符public,只能在方法中使用
- 局部内部类不能包含静态变量
- 使用局部变量的本质是final的
4.4.匿名内部类,没有名字的局部内部类(安卓用的比较多)
- new 父类的构造器 或者 接口 (){ }
- 必须要有父类或者实现了接口
5.枚举,表示一个事件的固定状态
- enum 修饰,枚举是一个特殊的类
- 枚举不能创建对象,构造器私有化
- 可以和switch配合使用