抽象类
-
- abstract抽象的
-
- 1.可以修饰什么
- 2.修饰后有什么特点
- 3.什么叫抽象类 抽象类有什么特点?(通常用来描述事物 还不是很具体)
- 4. 小问题
- 接口(interface)
- 枚举(Enum)
abstract抽象的
(很不具体 没有具体的执行 只是个概念)
1.可以修饰什么
- 修饰方法
用abstract修饰符修饰的方法 只有方法的结构 没有方法执行体叫做抽象方法
当然注意native修饰的方法虽然也没有方法体 但是不是抽象方法 只是执行的过程是其他语言写的 看不见 - 修饰类 用abstract修饰符修饰的类 叫做抽象类
2.修饰后有什么特点
抽象类中必须有抽象方法么? 不是必须含有抽象方法
抽象方法必须放在抽象类中么? 目前来看必须放在抽象类中(或接口中) 普通类是不允许含有抽象方法
3.什么叫抽象类 抽象类有什么特点?(通常用来描述事物 还不是很具体)
-
类里面有什么 成员
属性 可以含有一般的属性 也可以含有 private static final等等
方法 可以含有一般的方法 也可以含有 private static final等等
注意:抽象类中是允许含有抽象方法(只有方法结构 没有方法执行体)
块 可以含有一般的程序块 也可以含有static程序块
构造方法 可以含有构造方法 包括重载 -
类如何使用 创建对象
抽象类含有构造方法 但是我们不能通过调用构造方法直接创建对象
抽象类只能通过子类单继承来做事
为什么不让我们调用构造方法创建对象?为什么还有呢? -
类和类的关系
抽象类----直接单继承----抽象类 可以
抽象类----直接单继承----具体类 可以 (用法通常不会出现)
具体类----直接单继承----抽象类 不可以 (将父类的抽象方法具体化 或子类也变成抽象类)
4. 小问题
抽象类中能不能没有抽象方法 全部都是具体成员 可以
抽象类中能不能没有具体成员 全部都是抽象方法 可以 —> 抽象类抽象到极致 质的变化 —> 接口
接口可以理解为是抽象类抽象到极致—>还是一个类的结构 不能用class修饰 改用interface修饰
接口(interface)
什么是接口(通常是为了定义规则)
接口也是一个类的结构 只不过 用interface修饰 替换原有的class
-
有什么 成员
属性 不能含有一般属性 只能含有公有的静态的常量 public static final
方法 不能含有一般方法 只能含有公有的抽象的方法(1.8 defualt修饰具体方法)
块 不能含有一般程序块 也不能含有static块(块本身就是具体的 接口中不让有具体的)
构造方法 不能含有构造方法 -
如何使用 创建对象
不能创建对象
只能通过子类多实现(implements)来做事
public class A implements B,C,D{}
-
与别的类结构关系
接口不能继承别的类 最抽象
抽象类----直接多实现----接口 可以
具体类----直接多实现----接口 不可以(必须将接口中的抽象方法具体化 自己变成抽象类)
*接口—多继承—接口 可以直接多实现
枚举(Enum)
一个类中的对象 认为个数是有限且固定的 可以将每一个对象一一列举出来
-
试一试若没有枚举类型的时候 如何手动设计 (静态常量 单例模式) Day(类 当做描述星期 7个对象)
private构造方法
public static final属性 = new -
JDK1.5版本之后可以直接定义enum类型
我们自己定义的enum类型直接默认继承Enum(java.lang包)
我们自己定义的enum类型不能再写extends 但是可以实现
Enum类型
有两个属性
name----->枚举对象的名字 name()获取name属性
ordinal—>枚举对象在类中罗列的顺序 类似index 也从0开始 ordinal()获取序号
一些常用的方法
valueOf() 通过给定的name获取对应的枚举对象
values() 获取全部的枚举对象 —> 返回一个数组 Day[]
compareTo() 可以比较两个枚举对象 int
toString() 由于这个方法没有final修饰 可以覆盖(重写) -
switch内部判断枚举的应用
-
我们也可以在enum中描述自己的一些属性或方法
必须在enum类中第一行 描述一下枚举的样子 最后需要分号结束;
可以定义自己的属性
类创建的过程中 帮我们创建枚举类型的对象
需要给枚举类型提供对应样子的构造方法 构造方法只能private修饰 可以重载