day17 enum abstract interface 枚举 抽象 接口

一、枚举 enum

 枚举本来的面目

创建Season类, 所有类都默认继承Object,写不写都一样

声明属性 :季节的名字、 季节的描述,

因为枚举的对象是看的见的客观事物,

想让它的属性不可修改 使用 final修饰表示最终的 ,也是唯一的不可更改的

day17 enum abstract interface 枚举 抽象 接口_第1张图片

重载构造函数,传入形式参数,目的在于使用构造方法创立季节类对象

时引入相应的季节名和描述属性。

day17 enum abstract interface 枚举 抽象 接口_第2张图片

 穷举所有季节对象。

day17 enum abstract interface 枚举 抽象 接口_第3张图片

 重写toString方法,否则测试main方法中输出的是地址day17 enum abstract interface 枚举 抽象 接口_第4张图片

 day17 enum abstract interface 枚举 抽象 接口_第5张图片


 基本格式

 

day17 enum abstract interface 枚举 抽象 接口_第6张图片

 可以看到枚举输出结果就是写好的的对象。


枚举类类型 中应用 switch case

day17 enum abstract interface 枚举 抽象 接口_第7张图片

 

day17 enum abstract interface 枚举 抽象 接口_第8张图片

 


二、抽象

抽象规则复杂,形式简单

怎么写一个抽象方法

 父类方法当中 前加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 关键字 创建 接口类

day17 enum abstract interface 枚举 抽象 接口_第9张图片

与class类不同 

接口创建的属性

默认是常量  且常量名都必须大写,声明的同时必须赋值

属性默认带有 public static final ,写不写都在

接口创建的方法

默认是抽象方法 在接口里甚至可以省略abstract 

1.8之后,可以写入实例方法,必须由default修饰

为什么引入接口?

主要针对父类当中有些方法,多个子类中有的有这个

方法可以继承,有的又没有这个方法继承无用,

创建接口专门对接某个子类,给子类提供特有的抽象方法。

接口也可以理解为扩充额外的功能

day17 enum abstract interface 枚举 抽象 接口_第10张图片

 写一个电脑类

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("录入文字");
    }
}

 

写一个接口类 类型 

day17 enum abstract interface 枚举 抽象 接口_第11张图片

 运行

day17 enum abstract interface 枚举 抽象 接口_第12张图片

 

你可能感兴趣的:(面向对象,java,开发语言)