Day36--接口

Day36--接口

普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有!
接口:只有规范!自己无法写方法!专业的约束!约束与实现分离

接口本身只是一个契约,规定了实现它的类必须要做什么(实现接口中的方法)

OO 的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如 C++、Java、C#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

声明接口的关键字:interface

我们先看几个不同的标识:

image-20241122200356287

A是类,是蓝色的圆,中间一个C

Action是抽象类,虚线勾勒的圆,里面C

UserService是接口,绿色I

如何创建接口:

新建类----将class改为interface

​ 建立UserService的类

示例:

​ 建立UserService的类,并且创建public abstract void run();的方法

接口里面的所有定义其实都是抽象的,默认是Public abstract
package com.liu.oop.demo09;
//接口里面的所有定义其实都是抽象的,默认是Public abstract
public interface UserService {
    public abstract void  run();
}

image-20241122200808716

public abstract是灰色的,可以不用写

易错:接口里面的都是抽象的方法,方法不能有主体!!!!!!

package com.liu.oop.demo09;
//接口里面的所有定义其实都是抽象的,默认是Public abstract
public interface UserService {
     void  run(){}//报错
}

image-20241122200959760

接口都需要有实现类

实现类接口的类,就需要重写接口的方法

​ 建立UserServiceImpl的实现类

package com.liu.oop.demo09;
//接口里面的所有定义其实都是抽象的,默认是Public abstract
public interface UserService {
     void add(String name);
     void delete(String name);
     void update(String name);
     void query(String name);
}

package com.liu.oop.demo09;

//类 implements 接口
public class UserServiceImpl implements  UserService{
    @Override
    public void add(String name) {
        
    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }
}

类 implements 接口

可以利用interface实现多继承,继承多个接口

比如,我们再创建一个接口TimeService,接口里面有void timer();的方法

package com.liu.oop.demo09;

public interface TimeService {
    void timer();//计时器
}

想让UserServiceImpl也使用这个接口,就要添加上

package com.liu.oop.demo09;

//类 implements 接口
public class UserServiceImpl implements  UserService,TimeService{
    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void timer() {
        
    }
}

要注意的是,接口只是对方法的定义

在接口里面,所有的属性默认是静态常量 public static final

​ 例如:创建属性public static final int age=99;

public static final int age=99;

image-20241122202736212

默认的省略,只写

 int age=99;

接口不能初始化,但可以通过实现接口的类来使用接口。例如,创建一个实现Animal接口的Cat类:

class Cat implements Animal {
    @Override
    public void makeSound() {
        System.out.println("喵喵!");
    }
}
  • 然后可以在其他代码中使用这些实现类:

    public class Main {
        public static void main(String[] args) {
            Animal cat = new Cat();
            cat.makeSound();
        }
    }
    
    • 在这里,Animal接口本身没有被初始化,而是通过Cat类(Animal接口的实现类)的实例化来使用接口中定义的方法。

总结:

接口
    1.约束
    2.定义一些方法,让不同的人实现   10个员工,用同一个接口,完成同一个任务,可能有10种方法
    3.方法默认Public abstract
    4.常量默认public static final
    5.接口不能被实例化
    6.implements可以实现多个接口
    7.实现类必须重写接口中的方法
posted @ 2024-11-22 20:36  1hahahahahahahaha  阅读(3)  评论(0编辑  收藏  举报