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


 


目录
相关文章
|
2月前
|
安全 Java 数据安全/隐私保护
|
2月前
|
设计模式 Java 程序员
谈谈代码:漫谈代理模式
代理模式是在编程中非常常见的设计模式.笔者在面试的过程中也经常会问到相关的问题,但是很多同学答的并不尽人意
59 0
谈谈代码:漫谈代理模式
|
2月前
|
存储 C++
【C++】多态(重写)的实现过程及其原理【核心知识点精讲】(22)
【C++】多态(重写)的实现过程及其原理【核心知识点精讲】(22)
|
9月前
【面试题精讲】接口和抽象类有什么共同点和区别?
【面试题精讲】接口和抽象类有什么共同点和区别?
|
2月前
|
Java 数据安全/隐私保护
Java面向对象编程:封装技术详解
Java面向对象编程:封装技术详解
30 0
|
2月前
|
C++
C++ 数据封装的方法,重点是其编程思想
在C++中,数据封装一般指的是将数据和操作这些数据的函数绑定在一起的程序设计方式。通常使用C++的类来实现
43 7
|
2月前
|
存储 Java
java反射——设计框架的灵魂
java反射——设计框架的灵魂
|
2月前
|
Unix Linux 测试技术
C++封装详解——从原理到实践
C++封装详解——从原理到实践
125 0
|
8月前
|
XML Java API
深入谈谈API接口的作用
深入谈谈API接口的作用
|
11月前
|
存储 算法 Java
Java集合重点知识详解——优点以及内部继承关系
Java集合重点知识详解——优点以及内部继承关系
77 0