【JavaSE基础】随着jdk的更新,你确定你真的还了解接口吗?教你深入理解和掌握接口

简介: 今天为大家详解一下接口。接口的学习非常简单,却是我们以后学习工作生活中最常使用的东西。今天这篇文章将带大家将接口的使用和易错点一网打尽。

⭐️小剧场⭐️(答案在末尾)


下列关于接口的说法正确的是?(多选)


               A.接口中可以定义成员变量,且必须被static final修饰


               B.接口中的方法默认访问权限为public


               C.接口和抽象类的区别在于接口的方法必须为抽象方法(jdk1.8后)


               D.接口也可以继承多个接口。


🍅1.什么是接口?


🍄 1.接口基本概念


          接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。


         如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。        


🍄 2.定义接口的格式


public interface A {//定义一个接口
    public static final String name="hello";//这里即使不写static final也会被默认加上,全局常量
    abstract  void test();//抽象方法
}
       🍄 3.实现接口的格式
class B implements A{
    @Override
    public void test() {
        System.out.println("重写了接口A的test方法");
        System.out.println(name);//继承了常量name
    }
}


🍅3.为什么要有接口?


       我们都知道,Java语言是单继承多实现的语言。因为只能每个类只能继承一次,所以继承是非常宝贵的,如果可以用接口就能实现的,我们尽量不使用继承来获得 ,因为每个类都可以实现多个接口。这里不细究到底什么时候使用接口什么时候使用抽象类。抽象类一般是将多个类共有的属性抽取出来,接口一般是给某个类实现额外特定的功能,比如经理和工人都是为老板服务的,但经理却在年底有奖金分成,这时我们就可以给可以给经理实现一个包含获得奖金方法的接口。接口还可以帮助我们完成代码的解耦。                        


建议先观看我的抽象类文章:【JavaSE基础】深入学习和掌握抽象类,了解易错知识点


🍅4.接口的性质和使用


🍈1.接口之间的多实现


        接口也是可以多实现接口的,比如Java的集合类中的List和Map接口,都是实现了我们的Collection接口,可以实现一个也可以实现多个,因为接口本来就是被运行多实现的。我们通常也可以类似像继承的概念将它们称之为父接口和子接口。但是要注意,接口实现接口时用的是extends关键字而不是implements


public interface A {//定义一个接口A
}
interface C{//定义一个接口B
}
interface B extends A,C {//接口C继承A和B接口,
    //B接口将继承A,C接口的属性和方法
}


🍈2.接口的子类(不是抽象类),必须重写接口的全部方法


     我们知道,接口中的方法一般都是抽象方法(因为在jdk1.8中已经允许接口存在静态方法)。当一个类实现一个接口时,意味者它获得了这个接口的所有的抽象方法,如果我们不把所有的抽象方法重写,那么这个类就必须得变为抽象类(因为包含抽象方法的类一定是抽象类)。所以一般我们实现接口后,需要将这个接口的所有方法进行重写。  


public interface A {//定义一个接口A
    void test1();//抽象方法test1 接口中的方法默认都是抽象方法
    void test2();//抽象方法test2  
}
class B implements A {//类B实现了A接口
    //必须将A接口所有方法重写,否则B类将变为抽象类
    @Override
    public void test1() {
        System.out.println("重写test1方法");
    }
    @Override
    public void test2() {
        System.out.println("重写test2方法");
    }
}


🍈3.接口不可以直接实例化


       接口和抽象类一样,因为可能包含抽象方法,所以是不可以直接实例化的。但是我们可以利用接口的子类对象向上转型实例。也就是我们常说的父类对象指向子类实例。


public class A implements B {
    public static void main(String[] args) {
        B object=new A();
        //左为父类接口B  右为子类对象A
    }
}
interface B{
}


🍈4.接口中的变量默认都是常量


       前面我们说了虽然接口中可以定义变量,但其实这些变量都是默认都被static final修饰。我们知道被static final修饰的变量其实是是我们的全局常量,严格意义上它并不叫做变量。我们可以直接通过接口名.变量名的格式访问。


public class A {//注意这里A并未实现B接口
    public static void main(String[] args) {
        System.out.println(B.name);//可以访问name属性
    }
}
interface B{
    //其实被默认加了static final
    String name="hello";
}


🍈5.接口中可以定义静态方法(视jdk版本而定)


       在老版的jdk中,接口中的方法得为抽象方法。但随着jdk的更新(以1.8为例),接口中开始允许存在静态方法。我们可以像类中的静态方法一样通过接口名直接调用静态方法。但是这里要注意后续实现接口的类并不能继承这个方法,因为静态资源是无法继续继承的。JDK1.8中,接口中的方法可以被default和static修饰,但是,被修饰的方法必须有方法体        


public class A {//注意这里A并未实现B接口
    public static void main(String[] args) {
        B.test();//通过接口名直接调用
        }
}
interface B{
    static void test(){
        System.out.println("接口中的静态方法");
    }
}


🍈6.接口不可以继承类


       类可以在继承类的同时实现多个接口,但我们的接口继承自接口,而不是继承类。要区分概念


public class A extends C implements B {
   //A继承C的同时实现B接口
}
interface B{
}
class C{
}

⭐️小剧场解答⭐️


       答案:ABD


       C.在jdk1.8中接口已经允许存在静态方法了        


相关文章
|
5月前
|
关系型数据库 MySQL Linux
【Linux】jdk & Tomcat & MySql的安装及Linux后端接口部署
【Linux】jdk & Tomcat & MySql的安装及Linux后端接口部署
107 0
|
2月前
|
Java 开发者
JDK 9新特性探秘:接口中的私有方法
本文旨在探讨Java Development Kit 9(JDK 9)为Java接口引入的新特性——私有方法。在JDK 9之前,接口只能包含公共的抽象方法和常量。然而,随着Java的不断发展,接口中需要更加灵活的方式来处理复杂性和代码重用。因此,JDK 9引入了私有方法,允许开发者在接口内部定义私有方法和私有静态方法,从而提高了代码的模块性和可维护性。本文将详细介绍这一新特性的使用方法、应用场景及其对Java编程的影响。
|
3月前
|
存储 Java 关系型数据库
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
|
3月前
|
JavaScript 前端开发 Java
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(一)
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(一)
|
3月前
|
Java
重学JDK8新特性之Lambda、函数式接口、接口新增方法、方法引用
重学JDK8新特性之Lambda、函数式接口、接口新增方法、方法引用
39 0
|
4月前
|
前端开发 关系型数据库 MySQL
J2EE项目部署与发布(Linux版本)->jdk&tomcat安装,MySQL安装,后端接口部署,linux单体项目前端部署
J2EE项目部署与发布(Linux版本)->jdk&tomcat安装,MySQL安装,后端接口部署,linux单体项目前端部署
51 0
|
4月前
|
关系型数据库 MySQL Java
Linux系统jdk&Tomcat&MySQL安装以及J2EE后端接口部署
Linux系统jdk&Tomcat&MySQL安装以及J2EE后端接口部署
44 0
|
5月前
|
Java API Scala
【JDK新特性】一篇搞懂Lambda表达式 & 函数式接口
【JDK新特性】一篇搞懂Lambda表达式 & 函数式接口
|
9月前
|
Java C++
详解JDK锁01:结合源码一文弄懂Lock接口!
详解JDK锁01:结合源码一文弄懂Lock接口!
|
10月前
|
存储 SQL Java
【Java新特性学习 二】JDK8: 语言新特性之Lambda表达式、函数式接口、接口的默认方法和静态方法
【Java新特性学习 二】JDK8: 语言新特性之Lambda表达式、函数式接口、接口的默认方法和静态方法
66 0