暑假复习篇之继承②【接口】

public class 类名{  }

public interface 接口名{   }

推荐书:《人月神话》《设计模式》

一、类:class 类别 

①类与类之间是继承 extends

概念:代码中定义的类,用来表示一个类别,根据一类事物定义的模版,模版中包含这类食物具有的属性、特征、行为、功能等 也就是 属性 和 方法

二、抽象类:

①类可以继承抽象类

②抽象类可以实现接口

三、接口:interface【存在的意义:为后续开发扩展】

①类实现接口 implements

② 接口与接口之间是继承 extends

1、格式: public interface 接口名{   }

2、内容:接口中所有的成员都是默认公开的 public 修饰符

①属性:默认使用public static final 修饰符 修饰符

②static 静态的 唯一的 修饰的属性可以使用 类名 / 接口名调用

③final 最终的 不变的 修饰的属性在初始化赋值之后,不可以改变值

3、方法:

①抽象方法:没有大括号的方法,这个方法只有结构,没有方法体 -> 接口最重要的结构

②默认方法:使用default 修饰符 修饰的方法,可以被接口的子类所继承

③静态方法:使用static 修饰符 修饰的方法,可以被接口名直接调用

4、接口的特性:

①接口是否可以直接创建对象?

接口具有抽象的方法,接口也是抽象的结构,抽象的结构不能创建具体的对象出来

如果接口能创建对象,接口创建的对象调用抽象方法时,抽象方法没有方法执行

②接口的使用方式:

将接口看成一个类的模版,使用自己定义的类实现接口,形成了 类继承接口的形式。

        - 创建一个新的类  实现  接口 :public class 类名 implements 接口名{  }

        - 重写接口中的所有抽象方法 为具体方法

        - 一个类可以实现多个接口

        - 实现了接口的类 可以看作接口的一种具体实现

③为什么需要接口:

- 类:不完全抽象

        属性:抽象的,定义类只可以定义类的哪些属性,而不能定义每个属性都是什么值

        方法:不是抽象的,方法中逻辑实现是固定不变的

- 接口:

        属性:static final 修饰 是非常具体的

        方法:接口具备抽象方法,方法是抽象的

- 类和接口 都是一种数据类型

- 例子:

        动物类:吃的方法    狮子类与牛类继承动物类的吃   

        植物类: 食人花不能继承动物的吃,而植物类没有吃的方法给他继承

根据吃这个行为进行统计,统计有多少生物具有吃的行为?

解决办法:

        定义一个吃的接口,让动物类和食人花类都实现这个接口,重写吃的方法。

        吃的接口可以作为动物类和食人花类的 “ 父类 / 父接口 ”

        接口是可以以行为进行分类的,我们在发现很多类都具备相同的行为,那么我们就可以定义一个接口,将这些行为在接口中进行抽象设计,让这些类都实现这个接口,这样,我们就可以同一对这些类进行操作了



public interface Lock {
    public static  final int id = 10;
    public static final String name = "门锁";
    String color = "黑色";

    //方法
    public void open();
    public void close();
    public static void test(){
        System.out.println("接口静态方法  测试");
    }
    public default void test2(){
        System.out.println("接口默认方法  测试");
    }
}

5、例子:ActionListener 动作监听器接口

6、以5G为例:

        单纯将5G是一个通信协议,是一种规范,支持5G的设备以及程序需要按照5G的规范来开发

5G:抽象的设计,没有具体实现的内容

5G手机:根据抽象设计完成的具体实现

门锁代码示例

package lfx250705.newDoor;

public class Door {
    //锁:未知的 需要一把可以装在门上的锁
    Lock mylock;//定义一个锁的接口变量名mylock

    public void openDoor() {
        mylock.unlock();

    }
    public void closeDoor() {
        mylock.lock();

    }



}
package lfx250705.newDoor;
//锁的接口 是一个锁的行为的抽象设计结构
public interface Lock {

    //定义好座位一把锁锁需要具备的功能
    void unlock();
    void lock();

}
package lfx250705.newDoor.locks;

import lfx250705.newDoor.Lock;

public class FaceIDLock implements Lock {
    public void unlock(){
        System.out.println("使用人脸打开门,门开了");
    }
    public void lock(){
        System.out.println("使用人脸关上门,门关了");

    }
}
package lfx250705.newDoor.locks;

import lfx250705.newDoor.Lock;

//KeyLock是一个具体实现的锁类 可以用来创建对象,并且也是基于Lock接口实现的
//那么就可以适配Door类中mylock

public class KeyLock implements Lock {
    public void unlock(){
        System.out.println("使用钥匙打开门,门开了");
    }
    public void lock(){
        System.out.println("使用钥匙关上门,门关了");

    }
}
package lfx250705.newDoor.locks;

import lfx250705.newDoor.Lock;

public class PasswordLock implements Lock {
    public void unlock(){
        System.out.println("使用密码打开门,门开了");
    }
    public void lock(){
        System.out.println("使用密码关上门,门关了");

    }
}
package lfx250705.newDoor;

import lfx250705.newDoor.locks.FaceIDLock;
import lfx250705.newDoor.locks.KeyLock;
import lfx250705.newDoor.locks.PasswordLock;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {


        //主函数测试

        //这是我们购买的门对象
        Door door = new Door();
        //我们购买的门锁对象
        KeyLock keyLock = new KeyLock();
        PasswordLock passwordLock = new PasswordLock();
        FaceIDLock faceIDLock = new FaceIDLock();

        //选择三把锁中的一把作为门锁
        door.mylock = keyLock;
        Scanner sc = new Scanner(System.in);
        System.out.println("请选择门锁:1.密码锁 2.人脸锁 3.钥匙锁");
        switch (sc.nextInt()){
            case 1:
                door.mylock = passwordLock;
                break;
            case 2:
                door.mylock = faceIDLock;
                break;
            case 3:
                door.mylock = keyLock;
                break;
            default:
                System.out.println("输入错误");
                return;
        }

        System.out.println("请选择操作:1.打开门 2.关闭门");
        while (sc.hasNext()) {
            switch (sc.nextInt()) {
                case 1:
                    door.openDoor();
                    break;
                case 2:
                    door.closeDoor();
                    break;
                default:
                    System.out.println("输入错误");
            }
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值