一、枚举 enum
枚举本来的面目
创建Season类, 所有类都默认继承Object,写不写都一样
声明属性 :季节的名字、 季节的描述,
因为枚举的对象是看的见的客观事物,
想让它的属性不可修改 使用 final修饰表示最终的 ,也是唯一的不可更改的
重载构造函数,传入形式参数,目的在于使用构造方法创立季节类对象
时引入相应的季节名和描述属性。
穷举所有季节对象。
重写toString方法,否则测试main方法中输出的是地址
基本格式
可以看到枚举输出结果就是写好的的对象。
枚举类类型 中应用 switch case
二、抽象
抽象规则复杂,形式简单
怎么写一个抽象方法
父类方法当中 前加abstract
方法体和大括号删除
注意写了抽象方法,类也变成了抽象类,否则报错和人的脚一样,脚残疾了,人也必须是残疾的。
具体规则
1. 抽象方法
1. 由abstarct修饰的方法叫做抽象方法
2. 抽象方法没有方法体,连{}都没有
3. 抽象方法必须放在抽象类中
4. 抽象方法必须被重写
5. 抽象方法可以被重载(既可以被抽象方法重载,也可以被非抽象方法重载)
6. 抽象方法不可以被 static, final ,private,
1. 因为final 和private修饰的方法不可以重写,但是抽象方法必须被重写,所以不可以用final和private修饰
2. 因为static修饰的方法不能被重写,而抽象方法必须被重写2. 抽象类
1. 被abstract修饰的类叫做抽象类
2. 包含抽象方法的类一定是抽象类,但是不包含抽象方法的类也可以是抽象类
3. 抽象类不能被实例化(不能new 对象)
4. 抽象类可以定义任意变量和方法,常量
5. 抽象类必须被继承
1. 必须重写抽象类中的抽象方法-------------------变不完整为完整
2. 子类如果不想重写父类的抽象法,那么子类必须是抽象类
6. 抽象类的意义
1. 封装了子类共有的属性和方法 -------------提高代码的复用性
2. 可以包含抽象方法,为所有的子类提供了统一的方法(名字统一),强制必须重写
三、接口
怎么创建接口?
通过implements 关键字 创建 接口类
与class类不同
接口创建的属性
默认是常量 且常量名都必须大写,声明的同时必须赋值
属性默认带有 public static final ,写不写都在
接口创建的方法
默认是抽象方法 在接口里甚至可以省略abstract
1.8之后,可以写入实例方法,必须由default修饰
为什么引入接口?
主要针对父类当中有些方法,多个子类中有的有这个
方法可以继承,有的又没有这个方法继承无用,
创建接口专门对接某个子类,给子类提供特有的抽象方法。
接口也可以理解为扩充额外的功能
写一个电脑类
package day17.Interface02; public class Computer { private Usb[] usb = new Usb[3]; // public Usb getUsb() { // return this.usb[0]; // } public void setUsb(Usb usb1, Usb usb2, Usb usb3) { this.usb[0] = usb1; this.usb[1] = usb2; this.usb[2] = usb3; } public void on() { System.out.println("开机"); if (usb != null) { for (int i = 0; i < usb.length; i++) { this.usb[i].service(); } } } }
写一个额外功能类 package day17.Interface02; public class KeyBored implements Usb{ private String name; public KeyBored() { } public KeyBored(String name) { this.name = name; } @Override public void service() { System.out.println("录入文字"); } }
写一个接口类 类型
运行