谈谈接口 0.0

简介: 在现实生活中,接口的例子比比皆是,比如:笔记本上的USB口,电源插座等...电脑的USB口上,可以插:U盘、鼠标、键盘...所有符合USB协议的设备。电源插座插孔上,可以插:电脑、电视机、电饭煲...接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用!那么在java中怎么定义接口呢?在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

目录


接口的概念


接口语法


接口的成员变量与方法


接口的使用


实现多个接口


接口的概念

在现实生活中,接口的例子比比皆是,比如:笔记本上的USB口,电源插座等...


电脑的USB口上,可以插:U盘、鼠标、键盘...所有符合USB协议的设备。


电源插座插孔上,可以插:电脑、电视机、电饭煲...


接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用!


那么在java中怎么定义接口呢?


在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。


接口语法

通过interface定义一个接口

interface IShape {
}

接口的成员变量与方法

那么接口中的成员有哪些呢?

interface IShape {
    int a = 10;
    void draw();
}

细心的小伙伴会发现-这个draw方法没有用abstract修饰为何能这样写呢?

这是因为你这样的话编译器会默认加上下面的东西:

interface IShape {
    public static final int a = 10;
    public abstract void draw();
}

在编译器中我们也可以注意到这些是灰色的:

8b0b50a8a76f3783b3d3a9d7665affb2_9d1e64b20e4b4d47bebd1d54e4596a15.png


因此我们可以总结:


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


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


接口当中不能有普通的方法(java8开始可以有default和static方法,可以有具体的实现)

interface IShape {
    public static final int a = 10;
    public abstract void draw();
    public static void test1() {
    }
    default void test2() {
    }
}

接口的使用

接口类型是一种引用类型,可以认为比抽象类还抽象,因此是不能new一个对象的。但是可以用关键词 implements 来实现接口。(要重写接口当中所有的抽象方法)

如下:

584d8caced75ffe95e6f418afab5fcc7_746ffbeb40e64302a1c61a6623c8d337.png

那么怎么调用呢?

接口通过向上转型和动态绑定

dbbb92025d110143539da5ccc23cde54_8cd65ecac7944e83af295d5fe8fd6e11.png

实现多个接口

在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口。

下面我们举个多接口例子:

我们先定义两个接口(跑,游泳),和一个抽象类(Animal)和一个Dog类

下面代码可以理解为:Dog是一个动物具有游泳和跑的特性

//接口1
public interface IRunning {
    void running();
}
//接口2
public interface ISwimming {
    void flying();
}
//Animal类
public abstract class Animal {
    public String name;
    public int age;
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public abstract void eat();
}
//狗类继承Animal类实现ISwimming,IRunning接口
//可以理解为Dog是一个动物具有游泳和跑的功能
public class Dog extends Animal implements ISwimming,IRunning{
    public Dog(String name, int age) {
        super(name, age);
    }
    @Override
    public void eat() {
        System.out.println("吃狗粮");
    }
    @Override
    public void swimming() {
        System.out.println("游泳");
    }
    @Override
    public void running() {
        System.out.println("跑");
    }
}

下面演示怎么调用,写一个Test类调用。

public class Test {
    public static void test1(Animal animal) {
        animal.eat();
    }
    public static void test2(IRunning iRunning) {
        iRunning.running();
    }
    public static void test3(ISwimming iSwimming) {
        iSwimming.swimming();
    }
    public static void main(String[] args) {
        Dog dog = new Dog("汪汪队队长",10);
        test1(dog);
        test2(dog);
        test3(dog);
    }
}

51b70525bd9ec8837743e246a65d3a23_38743d578cb441b6a3e969617fadd458.png


 


目录
相关文章
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
193 2
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的网上系统调查附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的网上系统调查附带文章和源代码设计说明文档ppt
84 0
|
Java API 索引
Gradle从0入门到实战系列【二】Groovy And Gradle
要学好Gradle,我们需要简单的学习Groovy的基础语法和闭包。Groovy 是一种基于 JVM 的动态语言,他的语法和 Java 相似,最终也是要编译 .class 在JVM上运行。Groovy 完全兼容 Java 并且在此基础上添加了很多动态类型和灵活的特性,比如支持闭包,支持DSL(领域特定语言),是一门非常灵活的动态脚本语言。
459 0
Gradle从0入门到实战系列【二】Groovy And Gradle
|
存储 应用服务中间件 网络安全
使用 Ansible 部署 Elasticsearch 集群
使用 Ansible 部署 Elasticsearch 集群
1073 0
使用 Ansible 部署 Elasticsearch 集群
876. 链表的中间结点【我亦无他唯手熟尔】
876. 链表的中间结点【我亦无他唯手熟尔】
147 0
Tkinter:Python的门面担当
在大多数时候,我们都在黑黢黢的控制台里执行 Python 脚本。这看起来很酷很 GEEK。但对于部分场景下的用户来说,这样就不大美观和人性化了:我们需要交互更方便的图形化产品,也就是 GUI(图形用户界面,Graphical User Interface)。
|
JavaScript 前端开发 索引
JavaScript —— 字符串(String)对象
JavaScript —— 字符串(String)对象
142 0
|
网络协议 Oracle Java
【Java】从Java代码到网络编程,三次握手又该如何理解
文章目录 1 网络编程的相关概念 1.1 网络、网络通信与IP地址 1.2 IPv4与IPv6 1.3 域名和端口号 2 网络协议 2.1 网络通信协议 2.2 TCP和UDP 2.3 三次握手 写在最后
【Java】从Java代码到网络编程,三次握手又该如何理解
|
Java 编译器 API
Java——谈谈框架中经常见到的序列化与反序列化技术
Java——谈谈框架中经常见到的序列化与反序列化技术
Java——谈谈框架中经常见到的序列化与反序列化技术
|
网络协议 网络安全