系统认知Java接口、接口与继承、接口与多态

简介: 在面向对象的基础之上,接口的出现是类性质的一种完善,是继承机制的一种补充,是体现多态性的一种形式。从生活实际出发,接口把它之下一系列复杂的逻辑,功能等通过“实现接口”的方式封装简化出来,只通过连接一个小小的口子就轻而易举地实现了背后实则很复杂的功能。我想这就是接口存在的意义所在吧。

前言

在面向对象的基础之上,接口的出现是类性质的一种完善,是继承机制的一种补充,是体现多态性的一种形式。从生活实际出发,接口把它之下一系列复杂的逻辑,功能等通过“实现接口”的方式封装简化出来,只通过连接一个小小的口子就轻而易举地实现了背后实则很复杂的功能。我想这就是接口存在的意义所在吧。

在这里插入图片描述

接口⭐

一.定义及语法

1.定义

一系列方法的声明使用,是一些方法的集合
给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来

2.语法:

interface 自定义的接口名字{
        属性
        方法
}
class 类名 implements 接口{
       类自己的属性
       类自己的方法
}

3.注意事项:

1.接口中的方法可以是抽象,静态,默认实现的方法
2.接口中的抽象方法必须在类中实现
3.JDK7前接口里的所有方法是没有方法体的,都是抽象方法
4.JDK8后接口可以有静态方法,默认方法

二.使用细节

🟢接口不能被实例化
例如:
在这里插入图片描述
🟢接口中所有方法为public方法,抽象方法可以不用abstract来修饰
例如:
在这里插入图片描述
🟢一个普通类实现接口,就必须将该接口中的所有方法都实现
例如:
在这里插入图片描述

🟢抽象类实现接口,可以不用实现接口的方法
例如:
在这里插入图片描述

🟢一个类同时可以实现多个接口
例如:
在这里插入图片描述
🟢接口中的属性只能是 public,final,static修饰
例如:

int a=10  等价于 public static final int a=10;

🟢访问接口中属性的方式为——接口名.属性名
例如:

public class Test {
    public static void main(String[] args) {
        System.out.println(Jiekou.a);  //访问接口属性的方式
    }
}
interface Jiekou{
    int a=10;
    void Method();
    void Method2();
}

🟢接口不能继承其他的类,但是可以继承多个别的接口
例如:
在这里插入图片描述
🟢接口修饰符只能是public和默认修饰符

三.实现接口与继承

🟢接口和继承解决的问题不同

✔️继承提高代码复用性和可维护性
✔️接口通过设计好各种规范来让其它类去实现这些方法

🟢接口是对Java单继承机制的一种补充,父类中没有的功能有时也可以通过实现接口来解决
例如:

public class Monkey {
    public static void main(String[] args) {
        Monkeyking monkeyking = new Monkeyking("悟空");
        monkeyking.jump();
        monkeyking.fly();  //通过实现接口,从而补充了功能
    }
    public  String name;
    public Monkey(String name) {
        this.name = name;
    }
    public void jump(){
        System.out.println("我会跳了~");
    }
}
interface Skill{      //接口类似于继承的一种补充机制 父类中没有的功能有时也可以通过实现接口来解决
    void fly();
    void swim();
}
class Monkeyking extends Monkey implements Skill{
    public Monkeyking(String name, int age) {
        super(name, age);
    }
    @Override
    public void jump() {
        super.jump();
    }
    @Override
    public void fly() {
        System.out.println("我又会飞了~");
    }
    @Override
    public void swim() {
        System.out.println("我又会游泳了~");
    }
}

🟢继承满足的是is-a的关系,接口满足的是like-a的关系(实质上还是补充机制)

四.接口多态性体现

🟢多态参数
可以在形参列表中传入接口类型的不同参数用来接收不同的对象
例如:
A为一个接口

public static void play(A a){...}

🟢多态数组
通过一个情景引入
例如:
有MP3和Computer两台设备,给一个接口Usb,分别实现接口,并将对象存入数组并遍历,要求在使用Computer时可以在实现work()方法的同时,实现特有的game()方法。利用多态数组实现。

public class PolyArr {
    public static void main(String[] args) {
        Usb[] usb=new Usb[2];                  //多态数组
        usb[0]=new Computer();
        usb[1]=new MP3();
        for (int i = 0; i < usb.length; i++) {
            usb[i].work();                    //体现动态绑定机制
            if (usb[i] instanceof Computer){  //类型判断
                ((Computer) usb[i]).game();   //向下转型
            }
        }
    }
}
interface Usb{
void work();
}
class Comptuer implements Usb{
    @Override
    public void work() {
        System.out.println("电脑在使用~");
    }
    public void game() {   //手机特有的功能
        System.out.println("电脑在玩游戏!");
    }
}
class MP3 implements Usb{
    @Override
    public void work() {
        System.out.println("MP3在工作!");
    }
}

🟢接口存在多态传递

public class Pass {
    public static void main(String[] args) {
        IE ie=new Teacher();   //接口类型的变量可以指向,实现了该接口的类的对象实例    
        IG ig=new Teacher();  //这就是接口的多态传递现象
    }
}
interface IG{}
interface IE extends IG{}
class Teacher implements IE{}
如果IE 继承了IG 接口,而Teacher 类实现了IE接口 那么,实际上就相当于Teacher类也实现了IG接口
相关文章
|
1天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
2天前
|
Java
java线程接口
Thread的构造方法创建对象的时候传入了Runnable接口的对象 ,Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要干的任务。 Runnable的对象称之为:线程任务对象 不是线程对象 必须要交给Thread线程对象。 通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行Runable实现类对象中的run里面的内容。
10 1
|
7天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
32 4
|
7天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
28 3
|
11天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
14 1
|
12天前
|
Java
Java基础(13)抽象类、接口
本文介绍了Java面向对象编程中的抽象类和接口两个核心概念。抽象类不能被实例化,通常用于定义子类的通用方法和属性;接口则是完全抽象的类,允许声明一组方法但不实现它们。文章通过代码示例详细解析了抽象类和接口的定义及实现,并讨论了它们的区别和使用场景。
java中获取当前系统日期
java中获取当前系统日期
JAVA 获取系统日期时间
JAVA 获取系统日期时间
296 0
|
Java 应用服务中间件
JAVA 取系统当前日期 少8个小时
        Date now = new Date();          DateFormat data = newjava.text.
823 0
|
3天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
下一篇
无影云桌面