接口(上)

news2025/2/28 11:57:34

🐷1.接口的概念

🐱‍🚀2.接口的语法规则

💚3.接口的使用

🚀4.接口的特性

🎆5.实现多个接口

🐶6.接口间的继承

🎊7.接口使用的实例

1.什么是接口呢???

接口放在现实生活中来说呢,就是手机啊。电脑的插座之类的,我们会发现那些插座几乎大家的充电口都能用,那么这就是一种标准

Java 中,接口可以看成是:多个类的公共规范,是一种引用数据类型。
也就是对抽象类的的进一步抽象
接口的语法规则
接口用interface来修饰
创建接口时, 接口的命名一般以大写字母 I 开头.
 接口的命名一般使用 "形容词" 词性的单词 .

 接口不能直接实例化,会报错

interface IShape{


    public abstract void  draw();
    public static final String name="一宝";
     default   public    void func(){
         System.out.println("默认的");
    }

}
class Rect implements IShape{

    @Override
    public void draw() {
        System.out.println("🟥");
    }
}
class  Circle implements IShape{

    @Override
    public void draw() {
        System.out.println("○");
    }
}
class  Heart implements IShape{

    @Override
    public void draw() {
        System.out.println(";❤");
    }
}

public class Test {
    public static void main(String[] args) {
        IShape shape = new Rect();
        IShape shape2 = new Circle();
        IShape shape3 = new Heart();
        shape.draw();
        shape.func();
        shape2.draw();
        shape2.func();
        shape3.draw();
        shape3.func();


    }

}

这个代码的结果是什么呢,shape.func()可以被调用吗???

 对于shape.func()可以这样理解,调用shape.draw()发生动态绑定,就到那个Rect重写的draw方法去了,但是调用shape.fun()就到接口中去了,因为func本身也是一个抽象方法,因为有了default的修饰,所以可以不在子类中重写,通过接口的引用,就直接到IShape当中去调了

下面实现电脑USB接口

package demo2;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2022-11-16
 * Time: 10:52
 */
interface  IUSB{
    void openDevice();
    void closeDevice();
}
class  KeyBoard implements IUSB  {

    @Override
    public void openDevice() {
        System.out.println("打开键盘");
    }

    @Override
    public void closeDevice() {
        System.out.println("关闭键盘");
    }
    public void intput(){
        System.out.println("敲击键盘");
    }
}
class   Mouse implements IUSB{

    @Override
    public void openDevice() {
        System.out.println("打开鼠标");
    }

    @Override
    public void closeDevice() {
        System.out.println("关闭鼠标");
    }
    public void click(){
        System.out.println("点击鼠标");
    }
}
class Computer{
    public void open(){
        System.out.println("开机");
    }
    public void close(){
        System.out.println("关机");
    }
    public void useDevice(IUSB  usb){//判断一下是不是所有的USB接口都可以被使用
        usb.openDevice();
        if(usb instanceof Mouse){
            Mouse mouse=(Mouse)usb;//向下转型
            mouse.click();//执行子类中特有的方法
        }else if(usb instanceof KeyBoard){
            KeyBoard keyBoard=(KeyBoard)usb;
            keyBoard.intput();
        }
        usb.closeDevice();
    }
}


public class Test {
    public static void main(String[] args) {
            Computer computer=new Computer();
                IUSB  iusb=new KeyBoard();//向上转型
                computer.useDevice(iusb);
                IUSB iusb1=new Mouse();
                computer.useDevice(iusb1);
    }

}
package demo3;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2022-11-16
 * Time: 13:48
 */
abstract class Animal{
    public String name;

    public Animal(String name) {
        this.name = name;
    }
}
interface IRunning{
    void run();
}
interface ISwimming{
    void swim();
}
interface IFly{
    void fly();
}
class Dog extends Animal  implements  IRunning{
    public Dog(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println(name+"正在跑");
    }

}
class Duck extends Animal implements  IFly,IRunning,ISwimming{
    public Duck(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println(name+"正在跑");
    }

    @Override
    public void fly() {
        System.out.println(name+"正在飞");
    }

    @Override
    public void swim() {
        System.out.println(name+"正在游泳");
    }
}
class  robot implements ISwimming{
    public String name;

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

    @Override
    public void swim() {
        System.out.println(name+"机器人在游泳");
    }
}


public class TestDemo {
    public static void walk(IRunning iRunning){
        iRunning.run();
    }
    public static void swim(ISwimming iSwimming){
        iSwimming.swim();
    }
    public static void main(String[] args) {
        walk(new Dog("贝贝"));
        walk(new Duck("丫丫"));
        swim(new Duck("丫丫1"));
        swim(new robot("小冰"));

    }

}

从这两段代码可以看出,只要这个类继承了这个接口,就可以实现

 

 

package demo4;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2022-11-16
 * Time: 14:14
 */
class Student  implements Comparable<Student>{
    public String name;
    public int age;
    public int score;

    public Student(String name, int age, int score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
    public int compareTo(Student o){//根据年龄比较排序
        if(this.age>o.age){
            return 1;
        }else if(this.age<o.age){
            return -1;
        }else{
            return 0;
        }
    }
}
//根据姓名字母排序
 /* if(this.name.compareTo(o.name) > 0) {
            return 1;
        }else if(this.name.compareTo(o.name) < 0) {
            return -1;
        }else {
            return 0;
        }*/
//使用冒泡排序实现依据年龄排序
public class Test {
    public static void sort(Comparable[] array) {
        for (int i = 0; i < array.length-1; i++) {
            for (int j = 0; j < array.length-1-i; j++) {
                /*if(array[j] > array[j+1]) {
                    交换;
                }*/
                if(array[j].compareTo(array[j+1]) > 0) {
                    Comparable tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                }
            }
        }
    }
    public static void main(String[] args) {
        Student[]  students=new Student[3];
        students[0]=new Student("wangyibo",25,100);
        students[1]=new Student("weihongyan",19,99);
        students[2]=new Student("gaoyan",19,95);
        System.out.println(students[0].compareTo(students[1]));
    }

}

 

 这个是调用sort函数实现排序

这个是调用compareTo方法实现的

当比较字符串是否相等用equals方法,当比较大小也要用compareT方法,要是想从大到小排,换个return  就好

 下面来总结一下接口的知识点

使用interface 接口来定义接口

接口不能被实例化

接口中的方法默认是public abstract 修饰的

接口中的成员默认是public static  final  修饰的

接口当中的方法,不能有具体实现,但是从jdk8开始,可以写一个default来修饰,我已经子啊前面的代码展示并解释了

接口当中不能有构造方法

接口需要被类实现,使用关键字implements

接口中可以有static修饰的方法

接口和接口之间使用关键字extends继承,与类的单继承不一样啊,类可以同时继承多个接口,接口和接口之间也可以多继承

interface A {
    void funcA();

}
interface B {
    void funcB();
}
//CC这个接口 不仅仅具备func这个功能,还具备了A和B接口的功能
interface CC extends A,B {
    void funcC();
}

class C implements CC {
    public void funcA() {

    }

    public void funcB() {

    }

    public void funcC() {

    }

}
public class Test2 {
}

就像这个,一个接口也可以同时继承多个接口,并拥有被继承接口的功能

类继承另一个类同时实现多个接口,代码也有体现到

今天的内容就到此结束,我们下期再见,886!!!

💚💚💚💚💚💚💚💚💚💚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【https】lighttpd增加https支持及openssl生成CA(Certificate Authority)和使用CA来制作签名证书操作说明

环境说明 ubuntu18.04.1、openssl指令需要支持 openssl生成CA&#xff08;Certificate Authority&#xff09; 生成RSA Private Key openssl genrsa -out ca.key 输出信息 $ openssl genrsa -out ca.key Generating RSA private key, 2048 bit long modulus (2 primes) ...…

Scala008--Scala中的数据结构【集合】

目录 一&#xff0c;概述 二&#xff0c;set的声明 1,不可变set集合 1)向不可变集合中添加元素 【需要新的set集合接收】 2&#xff09;对两个set集合进行合并 【需要新的set集合接收】 2&#xff0c;不可变的HashSet集合 2&#xff0c;可变HashSet集合 1&…

http-only原理与防御XSS实践

目录预备知识XSS攻击实验目的实验环境实验步骤一触发XSS漏洞实验步骤二引入Http-only实验步骤三验证http–only在防御XSS攻击时的作用预备知识 XSS攻击 http-only的设计主要是用来防御XSS攻击&#xff0c;所以学习本实验的读者应首先了解XSS攻击的相关原理内容。 跨站点脚本攻…

Vue 2 如何添加 register-service-worker 以实现缓存请求的目的

Vue 2 如何添加 register-service-worker 以实现缓存请求的目的 一、问题描述 现在 vue 3 的模板中是自带 register-service-worker 的。 用这个的好处是&#xff0c;它会自动将项目中的所有文件请求缓存到 service-worker 中&#xff0c;以实现再次打开网站的时候会非常非常…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园二手物品交易系统051x4

做毕业设计一定要选好题目。毕设想简单&#xff0c;其实很简单。这里给几点建议&#xff1a; 1&#xff1a;首先&#xff0c;学会收集整理&#xff0c;年年专业都一样&#xff0c;岁岁毕业人不同。很多人在做毕业设计的时候&#xff0c;都犯了一个错误&#xff0c;那就是不借鉴…

HTB-Tier1

HTB-Tier1 Appointment Task 1 What does the acronym SQL stand for? ********** ***** *******e Structured Query Language Hide Answer Task 2 What is one of the most common type of SQL vulnerabilities? *** ********n sql injection Hide Answer Task …

汉字风格迁移篇----EasyFont:一个基于风格学习的系统,可以轻松构建大规模手写字体

文章目录abstract1 INTRODUCTION2 RELATED WORK3 METHOD DESCRIPTION3.1 Selecting Input Character Set3.2 Learning Font Skeleton Manifold3.2.1 Character Matching.3.2.2 Training the GP-LVM3.3 Text Segmentation3.4 Stroke Extraction3.5 Overall Style Learning3.5.1 …

UNet - 数据加载 Dataset

目录 1. 介绍 2. 数据处理 dataset 2.1 预处理 2.2 加载数据 2.2.1 初始化 2.2.2 返回数据 2.2.3 样本数量 3. 测试一下 4. 完整代码 1. 介绍 之前介绍完了Unet网络的搭建&#xff0c;接下来说一下要解决的任务。 本章介绍的是&#xff1a;数据的加载处理 下面是整…

hadoop 3.3大数据集群搭建系列1-安装hadoop

文章目录一. 软硬件配置1.1 主机配置及规划1.2 软件配置1.3 安装常用的工具二. 安装前准备2.1 设置主机名2.2 设置hosts2.3 关闭防火墙2.4 ssh免密登陆2.5 ntpdate时间同步三. 安装3.1 安装hadoop3.1.1 下载hadoop并解压3.1.2 配置hadoop_home环境变量3.1.3 编辑etc/hadoop/had…

【毕业设计】图像识别垃圾分类系统 - python 深度学习

文章目录0 前言1 简介2 识别效果3 实现3.1 数据集3.2 实现原理和方法3.3 网络结构4 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对…

信息熵,交叉熵,KL散度,互信息一网打尽

talk 一直以来都是自己有时候 想去搞明白就搜搜博客看&#xff0c;模棱两可&#xff0c;记忆也比较模糊&#xff0c;这次直接较为系统的记录一下&#xff0c;之后忘了也能看看~ 1. 信息熵 这个概念是从信息论出现的&#xff0c;是香农定义的&#xff0c;根据事件发生的概率进…

excel怎么设置密码?加密文件这么做!

我们都知道&#xff0c;很多时候需要我们在电脑上保存很多excel文件。为了避免在工作中出现意外&#xff0c;我们需要在文件中设置一个安全密码。那么&#xff0c;电子表格excel怎么设置密码呢&#xff1f;如果我们设置了密码&#xff0c;想要取消原本的密码或者重新设置一个密…

Windows无法启动这个硬件设备(代码19)怎么办?

在我们使用电脑的过程中&#xff0c;遇到“由于其配置信息(注册表中的)不完整或已损坏&#xff0c;Windows无法启动这个硬件设备&#xff08;代码19&#xff09;”的提示时该如何解决呢&#xff1f; Windows无法启动这个硬件设备&#xff08;代码19&#xff09;&#xff0c;如何…

干货整理| 深度学习入门知识

一、深度学习的定义 深度学习&#xff08;Deep Learning&#xff09;&#xff0c;简称&#xff1a;DL&#xff0c;是一种实现机器学习的技术。 人工智能&#xff08;AI&#xff09;的概念是在1955 年提出的&#xff1b;机器学习&#xff08;ML&#xff09;概念是在1990 年提出…

springboot 整合clickhouse

最近需要做一个项目 需要整合clickhouse 本来有现成的项目&#xff0c;复制一下就好了。但是想自己从头开始一个个文件搭建 但是还是遇到了很多坑&#xff0c; 这就是传说中的约定优于配置吗 1 首先第一步application启动的时候 启动完了&#xff0c;就会退出&#xff0c…

[附源码]计算机毕业设计JAVA房屋租赁管理系统

[附源码]计算机毕业设计JAVA房屋租赁管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

C++QT实现压缩文件、文件夹和解压缩操作

一、前言 QZipWriter是用来压缩文件的类&#xff0c;需要在安装Qt是选择Sources源码安装。否则&#xff0c;无法使用QZipWriter。 1. QZipWriter函数说明 1.1 构造方法&#xff1a; QZipWriter(const QString &fileName, QIODevice::OpenMode mode (QIODevice::WriteOnl…

控制游戏人物移动的细节到底有多少?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏 unity实战入门 在游戏中我们在做控制游戏物体移动时会碰到以下常见的几种情况&#xff1a; 文章目录在游戏中…

adb shell AT指令发送短信

开启两个&#xff0c;命令行窗口。都进入adb shell。 查看 /dev下的smd设备节点&#xff0c;选取一个进行读写操作 一个窗口用来进行读&#xff0c;另一个窗口进行写入指令操作&#xff0c;读取和写入的节点需要一致。 SH4-1:/ # ls /dev/smd* ls /dev/smd* /dev/smd11 /dev/…

隐式神经表示一:神经网络拟合图像Implicit Neural Representations with Periodic Activation Functions

文章目录1. Implicit Neural Representations with Periodic Activation Functions0. 什么是隐式神经表示1. 了解SineLayer的初始化&#xff0c;还是没了解。。。2. 均匀分布3. Lemma 1.14. 一个简单实验, 拟合图像4.1 网络模型代码如下&#xff0c;就是全连接网络&#xff0c;…