谈谈接口 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


 


目录
相关文章
|
6月前
|
XML Java 数据库连接
谈谈Java反射:从入门到实践,再到原理
谈谈Java反射:从入门到实践,再到原理
119 0
|
6月前
|
设计模式 Java 程序员
谈谈代码:漫谈代理模式
代理模式是在编程中非常常见的设计模式.笔者在面试的过程中也经常会问到相关的问题,但是很多同学答的并不尽人意
68 0
谈谈代码:漫谈代理模式
|
6月前
|
存储 C++
【C++】多态(重写)的实现过程及其原理【核心知识点精讲】(22)
【C++】多态(重写)的实现过程及其原理【核心知识点精讲】(22)
|
26天前
|
Java
【编程基础知识】《Java 复用魔法:组合、继承与代理的奇妙之旅》
本文《Java 复用魔法:组合、继承与代理的奇妙之旅》深入解析了 Java 中的三种主要代码复用技术——组合、继承和代理,通过实例和图表详细说明了它们的概念、作用及应用场景,旨在帮助读者提升 Java 编程技能。
12 0
|
5月前
|
设计模式 Java 内存技术
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
32 0
|
5月前
|
Java
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
58 0
|
6月前
|
Unix Linux 测试技术
C++封装详解——从原理到实践
C++封装详解——从原理到实践
302 0
|
XML Java API
深入谈谈API接口的作用
深入谈谈API接口的作用
|
存储 算法 Java
Java集合重点知识详解——优点以及内部继承关系
Java集合重点知识详解——优点以及内部继承关系
96 0
|
存储 设计模式 缓存
一直在使用JDK动态代理, 不明白原理如何实现?
一直在使用JDK动态代理, 不明白原理如何实现?
一直在使用JDK动态代理, 不明白原理如何实现?