第21篇:Java 中接口的基本使用

简介: 📝 接口是一系列方法声明的集合(和抽象类类似)📝 接口是用来定义规范和标准的📝 接口通过interface 关键字定义📝 类可通过implements关键字实现接口中的方法📝 接口中可定义抽象方法

一、接口(Interface)基本使用

📝 接口是一系列方法声明的集合(和抽象类类似)
📝 接口是用来定义规范和标准的
📝 接口通过interface 关键字定义
📝 类可通过implements关键字实现接口中的方法
📝 接口中可定义抽象方法


📓 需求:家长请家教教小孩子👶学习(家教👨‍🏫的需求:① 会教画画;② 会教音乐🎼;③ 会教数学)
📓 把需要老师具备的能力抽象为方法(如:teachDrawing、teachMusic、teachMath)
📓 定义一个 接口(通过 interface关键字),在接口中定义抽象方法(teachDrawing、teachMusic、teachMath)
📓 这个接口是能够当家教老师的人需要遵循的规范、能够当家教老师的人需要遵循的规范标准
📓 认为自己能够胜任家教老师的人需要实现( implements)该接口中所有方法

孩子类:

public class Child {
    private String name;
    private Teacherable teacherable;

    public String getName() {
        return name;
    }

    public Child(String name) {
        this.name = name;
    }

    public void setTeacherable(Teacherable teacherable) {
        this.teacherable = teacherable;
    }

    public void study() {
        teacherable.teachDrawing(this);
        teacherable.teachMusic(this);
        teacherable.teachMath(this);
    }
}

Teacherable 接口:

/**
 * 能够胜任家教老师的人都必须实现 Teacherable 里面的三个方法
 */
public interface Teacherable {
    public abstract void teachDrawing(Child child);

    public abstract void teachMusic(Child child);

    public abstract void teachMath(Child child);
}

Student 学生类实现 Teacherable 接口:

public class Student implements Teacherable {
    @Override
    public void teachDrawing(Child child) {
        System.out.println("Student teaches【" + child.getName() + "】画画");
    }

    @Override
    public void teachMusic(Child child) {
        System.out.println("Student teaches【" + child.getName() + "】音乐");
    }

    @Override
    public void teachMath(Child child) {
        System.out.println("Student teaches【" + child.getName() + "】数学");
    }
}

Robot 机器人类实现 Teacherable 接口:

public class Robot implements Teacherable {
    @Override
    public void teachDrawing(Child child) {
        System.out.println("Robot 教【" + child.getName() + "】画画");
    }

    @Override
    public void teachMusic(Child child) {
        System.out.println("Robot 教【" + child.getName() + "】音乐");
    }

    @Override
    public void teachMath(Child child) {
        System.out.println("Robot 教【" + child.getName() + "】数学");
    }
}

TestDemo 测试类:

public class TestDemo {
    public static void main(String[] args) {
        Child qy = new Child("庆医");
        // qy.setTeacherable(new Student());
        qy.setTeacherable(new Robot());
        qy.study();
    }
}

二、接口中可定义的内容

📓 抽象方法:被abstract修饰的方法
📓 常量static final
📓 嵌套类型
📓 从 Java8 开始还可以定义:默认方法(被default修饰的方法)、静态方法(被static修饰的方法)


📓 上述可以定义的内容都是隐式public的(默认就是public,开发者定义的时候可以省略)
📓 接口中定义的方法默认就是抽象方法(开发者在接口中定义方法的时候可以abstract关键字)
📓 从 Java9 开始可以定义private方法
📓 定义常量的时候可以省略 staticfinal
📓 不能自定义构造方法、不能定义(静态)初始化块
📓 接口没有实例化的说法

public interface Testable {
    int MY_MONEY = 859632587;

    void test1();

    void test2(String description);

    class Demo {

    }

    static void test3() {
        System.out.println("接口中可以定义静态方法");
    }
}

三、接口细节

📝 接口是引用数据类型
📝 一个类可以通过implements关键字实现一个或多个接口
📝 实现(implements)接口的类必须实现接口中的所有抽象方法(除非它是一个抽象类)
📝 若一个类实现的多个接口中有相同的抽象方法,该相同的抽象方法只需要被实现一次
📝 extendsimplements可以一起使用(implements必须写在extends的后面)

✒️ 当父类和接口中的方法的方法签名一样的时候,返回值类型也必须一样
public class BaseTestDemo {
    public String test(String description) {
        return description;
    }
}
public interface Testable {
    String test(String description);
}
public class TestDemo extends BaseTestDemo implements Testable {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
        // Happy
        System.out.println(testDemo.test("Happy"));
    }
}

📝 一个接口可以通过extends关键字继承一个或多个接口

✒️ 当多个父接口中的方法的方法签名一样的时候,返回值类型也必须一样

📱 结束!如有错误,请不吝赐教!
相关文章
|
19天前
|
Java
Java——抽象类和接口
抽象类是一种不能被实例化的类,至少包含一个抽象方法(无实现体的方法),常用于定义一组相关类的共同特征,并强制子类实现特定方法。抽象方法不能被 `static` 或 `final` 修饰,且必须被重写。 接口则是一个完全抽象的类,用于规范类的行为。接口使用 `interface` 关键字定义,不能实例化,并且类与接口之间是实现关系。 内部类是在一个类内定义的类,分为成员内部类、静态内部类、局部内部类和匿名内部类。成员内部类可被修饰符修饰,静态内部类只能访问外部类的静态成员,局部内部类定义在方法内,匿名内部类则隐藏了名字,直接通过 `new` 关键字定义并实现接口或继承类。
14 5
Java——抽象类和接口
|
19天前
|
Java
Java——接口的使用实例
Comparable接口用于自定义类的对象比较。通过实现此接口并重写`compareTo`方法,可以定义自定义类型的比较规则。 接下来介绍了Comparator接口,它提供了一种更灵活的比较方式。通过实现Comparator接口并重写`compare`方法,可以根据不同属性定义不同的比较规则。例如,定义一个`BrandComparator`类来比较汽车的品牌。 最后,介绍了Cloneable接口,用于实现对象的克隆。实现该接口并重写`clone`方法后,可以创建对象的浅拷贝或深拷贝。浅拷贝仅复制对象本身,深拷贝则会递归复制所有成员变量。
15 4
Java——接口的使用实例
|
4天前
|
Java 测试技术
Java接口的生产环境应用注意点
在Java生产环境中,合理使用接口对提升代码质量至关重要。设计接口时应遵循单一职责原则,采用清晰命名,并控制方法数量。默认方法应谨慎使用,避免与实现类产生冲突。通过版本化管理接口更新,确保向后兼容。实现接口时需明确行为,保持实现与接口分离,利用多态增强灵活性。关注性能影响,适当文档注释及充分测试确保接口稳定可靠。综合运用这些策略,可以显著提高系统的可扩展性和维护性。
|
4天前
|
Java
Java 接口的简化理解
Java 接口是一种强大的概念,用于定义方法签名而非具体实现,作为行为规范,强调功能而非实现细节。接口是特殊的引用类型,包含常量和方法签名。其特点包括:无实现方法体、支持多重继承、内置常量定义。通过示例展示了如何定义和实现接口,以及如何通过接口引用调用实现类的方法。接口的应用场景包括抽象化、插件架构和松耦合设计。从 Java 8 起,接口还支持默认方法和静态方法,进一步增强了其灵活性和扩展性。理解接口是 Java 编程的基础之一。
|
5天前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
13天前
|
Java
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
22 7
|
9天前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
35 2
|
25天前
|
Java 数据库连接 数据库
Java服务提供接口(SPI)的设计与应用剖析
Java SPI提供了一种优雅的服务扩展和动态加载机制,使得Java应用程序可以轻松地扩展功能和替换组件。通过合理的设计与应用,SPI可以大大增强Java应用的灵活性和可扩展性。
48 18
|
22天前
|
Java 开发者
Java的接口详解
Java接口是编程中的一种重要特性,用于定义方法签名而不提供具体实现,作为类之间的契约,使不同类能以统一方式交互。接口使用`interface`关键字定义,可包含方法声明和常量。类通过`implements`关键字实现接口,并可同时实现多个接口,解决多重继承问题。接口中的方法默认为抽象方法,变量默认为`public static final`。Java 8引入了默认方法和静态方法,增强接口功能。接口广泛应用于回调机制和多态性实现,有助于构建更灵活和可维护的代码结构。
|
1月前
|
Java
盘点java8 stream中隐藏的函数式接口
`shigen`是一位坚持更新文章的博客作者,记录成长历程,分享认知见解,留住感动瞬间。本文介绍了函数式接口的概念及其在Java中的应用,包括`Comparator`、`Runnable`、`Callable`等常见接口,并详细讲解了`Function`、`Predicate`、`Consumer`、`Supplier`和`Comparator`等函数式接口的使用方法及应用场景,展示了如何利用这些接口简化代码并提高编程效率。**个人IP:shigen**,与shigen一起,每天进步一点点!
33 0
盘点java8 stream中隐藏的函数式接口
下一篇
无影云桌面