首先,我们先了解一下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();
    }
}

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

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

最后修改:2022 年 03 月 24 日
如果觉得我的文章对你有用,请随意赞赏