Java类之接口

简介: 首先,我们先了解一下Java中抽象类与继承。

首先,我们先了解一下Java中抽象类与继承

abstract可以定义抽象类,extends可以定义继承。但是对于Java这个语言,它的继承相对与CPP它舍弃了多继承,防止关系太多耦合,易混淆。

多继承会造成

1、若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量

2、若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。

Java里面,是不可以多继承的!

Java实现“多继承”的三种方式


但是我们有时候也是需要多继承的。

于是我们可以使用某些方法替代多继承。

  • 多层继承:实际就是多个单继承累积,最下面的子类可以具备前几个父类的特征,但这样的多继承会造成代码冗余,可读性较差,一般的开发同学都不会这样浪费时间。
  • 内部类:通过成员内部类实现多继承。
  • 接口:多继承机制实现优先使用接口,接口使用比较灵活,在企业级项目编程是最推荐的方式

一般都是接口来实现多继承。

接口

那说了这么多,啥是接口?

接口与抽象类有几个共同的,与继承也有类似之处。

接口与抽象类

  1. 都是上层的抽象层。
  2. 都不能被实例化。
  3. 都能包含抽象的方法,这些抽象方法用于描述类具备的功能,但是不提供具体的实现。

何为接口

接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合

我们先来看看网上的说法:

接口可以理解为一种特殊的类,里面全部是由*全局常量*公共的抽象方法所组成。接口是解决*Java无法使用多继承*的一种手段,但是接口在实际中更多的作用是*制定标准*的。或者我们可以直接把接口理解为*100%的抽象类*,既接口中的方法*必须全部*是抽象方法。

官方的解释是这样的:

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

接口的优势

  1. 接口被用来描述一种抽象。
  2. 因为Java不像C++一样支持多继承,所以Java可以通过实现接口来弥补这个局限
  3. 接口也被用来实现解耦
  4. 接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是finalpublic,static的。

定义接口

声明一个接口,我们使用interface这个关键字

定义了接口之后,我们需要注意:

JDK 1.8 以后,接口里可以有静态方法和方法体了。

JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。

JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去。

网络异常,图片无法展示
|

这样我们就可以定义一个方法,在IDEA中我们可以直接创建!

网络异常,图片无法展示
|

在接口中,我们用implements关键词来对接接口。假设我们定义一个接口类叫Text,普通类叫Demo。

定义接口

public interface Text {
    //下面定义了两个方法
    //没有方法体哦!!!
    String getName();
    void show();
}

接入接口

public class Demo implements Text {
}

使用接口中的方法

public class Demo implements Text {
    //在子类Demo中重写Text就可以
    @Override
    public String getName() {
        return "我被重写了";
    }
    @Override
    public void show() {
        System.out.println("Hello Word");
    }
}

调用输出

public class ShowDemo {
    public static void main(String[] args) {
        Text text = new Demo();
        test.getName();
        text.show();
    }
}

这样我们就调用了这个接口的方法。

注意:必须要重写接口里面的方法哦!

相关文章
|
1天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
14 1
|
1天前
|
存储 Java ice
【Java开发指南 | 第十四篇】Java Number类及Math类
【Java开发指南 | 第十四篇】Java Number类及Math类
10 1
|
1天前
|
Java 开发者
Java一分钟之-Lambda表达式与函数式接口
【5月更文挑战第12天】Java 8引入的Lambda表达式简化了函数式编程,与函数式接口结合,实现了代码高效编写。本文介绍了Lambda的基本语法,如参数列表、箭头符号和函数体,并展示了如何使用Lambda实现`Runnable`接口。函数式接口仅有一个抽象方法,可与Lambda搭配使用。`@FunctionalInterface`注解用于确保接口具有单一抽象方法。文章还讨论了常见的问题和易错点,如非函数式接口、类型冲突以及Lambda表达式的局部变量可见性,并提供了避免这些问题的策略。通过理解Lambda和函数式接口,开发者能提高代码可读性和效率。
39 4
|
1天前
|
Java API 容器
Java8函数式编程接口:Consumer、Supplier、Function、Predicate
Java8函数式编程接口:Consumer、Supplier、Function、Predicate
8 1
|
1天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
11 2
|
1天前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
18 3
|
1天前
|
Java ice
【Java开发指南 | 第二十九篇】Java接口
【Java开发指南 | 第二十九篇】Java接口
6 0
|
1天前
|
存储 Java ice
【Java开发指南 | 第十六篇】Java数组及Arrays类
【Java开发指南 | 第十六篇】Java数组及Arrays类
8 3
|
1天前
|
Java ice
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
10 4
|
1天前
|
存储 缓存 Java
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
9 2