栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 接口【详解】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 接口【详解】

接口(重点) 基本概念:

接口就是一种比抽象类还要抽象的类,体现为接口中所有的成员方法都是抽象方法

  • 定义类的关键字是class

  • 定义接口的关键字是interface

  • 继承的关键字是extends

  • 实现接口的关键字是implements

注意:

​ 接口中不能定义成员变量,只能定义常量

  • 接口中只能有被public,static,final关键字共同修饰的常量

    接口中的的所有方法都是抽象方法

  • 接口中的方法只能被public,abstract,static,default(jdk1.8之后的新特性),和strictfp修饰

类和接口之间的关系 类和类之间的关系:

类和类之间使用extends关键字表示继承的关系—类与类之间只支持单继承

类和接口之间的关系:

类和接口之间使用implements表示实现的关系----类与接口之间支持多实现(也就是一个类之可以同时实现多个接口)

接口和接口之间的关系:

使用extends表示继承的关系----接口之间可以多实现

  • 接口是为了解决java中无法进行多继承的问题

eg:假如有三个类: 金属类 货币类 黄金类

这里的黄金即属于金属也属于货币,所以就需要黄金类去同时继承金属类和货币类,但是java却只支持单继承,所以就无法实现

所以我们就提出了接口:

假如有两个接口:金属接口 货币接口 黄金类

这里的黄金类可以同时去实现金属接口和货币接口,也就解决了java中不能多继承的问题,也不违背java只支持单继承的特点

eg:

public interface Money{
    
}
--------------------------------

public interface Metel{
    
}

public class Gold implements Money,Metel{
    
}
  • 接口类型的引用指向实现类的对象,也就是形成了多态

eg:

Metel mt=new Gold();//这里的Gold实现了Metel接口,那么Gold也就是Metel接口的实现类
抽象类和接口只能用于多态,只能是使用多态的方式

(因为抽象类和接口都不能创建对象[抽象类都不能创建对象,那么比抽象类更加抽象的接口就更加不能创建对象了],所以只能是声明一个引用去指向以子类或者实现类为模板创建的对象,从而完成多态)

抽象类----子类

接口----实现类

  • 一个类实现了某个接口后必须实现该接口定义的所有方法(因为接口中的方法都为抽象方法)(jdk1.8之前)

接口间可以存在继承关系,一个接口可以通过extends关键字继承另外一个接口,子接口继承了父接口中定义的所有方法(这里由于子接口继承了父接口的所有方法,所以当一个类实现了这个子接口时,那么这个类必须实现(重写)这个子接口与父接口中的所有方法(jdk1.8之前)

eg:

interface Runner{
    public [abstract] void run();
}

interface Hunter extends Runner{
    public [abstract] void hunt();
}

public class Americancur implements Hunter{
    public void run(){
        
    }
    public void hunt(){
        
    }
}

抽象类和接口之间的区别(笔试题)

1.定义抽象类的关键字abstract class,而定义接口的关系是interface

2.继承抽象类的关键字extends,而实现接口的关键字是implements

3.继承抽象类只支持单继承,而实现接口可以多实现

4.抽象类中可以有构造方法,而接口中不可以有构造方法

5.抽象类中可以有成员变量,而接口中只能有常量

6.抽象类中可以有一般方法,而接口中只能有抽象方法(jdk1.8之前)

7.抽象类中增加方法不一定会影响子类,而接口中增加方法通常都会影响子类(抽象类中增加的方法可以是抽象方法,也可以是一般方法,所以不一定需要在子类中实现, 接口中增加的方法只能是抽象方法也就必须在子类中实现)

8.从jdk1.8开始允许接口中出现非抽象方法,但需要使用default关键字修饰

为什么增加第8个这个特性:

原因一:有的接口中假如方法特别多(假如有二百个),而这些方法都是抽象方法的话,如果有一个类需要实现这个接口时就要实现这个接口中的二百个抽象方法,这样的话代码量太大了

原因二:假如我们在写完代码之后,客户改变了需求,要求在接口之中加一个新的方法,如果这个方法按以前jdk1.8之前那样,也就是这个方法如果必须为抽象方法时,我们就需要修改所有实现了这个接口的子类(所以就会造成牵一发而动全身)

所以我们就增加了这个新特性,也就是可以通过default修饰接口中的方法表示默认实现,也就表示这个被default修饰的方法是一般方法,也就是不是抽象方法,子类也就可以实现也可以不实现

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号