Java基础之浅谈接口

Java基础之浅谈接口前言前几篇文章我们已经把Java的封装、继承、多态学习完了,现在我们开始比较便于我们实际操作的学习,虽然它也是Java基础部分,但是其实入门容易

欢迎大家来到IT世界,在知识的湖畔探索吧!

前言

  • 前几篇文章我们已经把Java的封装、继承、多态学习完了,现在我们开始比较便于我们实际操作的学习,虽然它也是Java基础部分,但是其实入门容易,精通很难。
  • 我认真的给大家整理了一下这些必须学会、了解的知识点。
    -下面我们正式进入正题吧<( ̄︶ ̄)↗[GO!]

一、接口

1.接口的概念

  • 接口:接口并不是类,而是帮助类去实现功能的一种技术。
  • 如果你的类符合某个特定的接口,我就会履行这项服务。
  • 定义接口我们可以使用interface关键字
  • 将类声明为实现某个接口可以用implements

2.什么是实例字段

  • 先说字段,什么是字段?
  • 字段是属于类的,它是会用public、private等关键字修饰的。而变量就是我们通常定义的int a这样的,它没有访问控制符;
  • 所以实例字段就是我们构造器中的,也就可以理解为没用构造方法。

3.接口的特点

  • 接口中的所有方法都自动是public的,因此在接口中我们可以省略public关键字
  • Java中接口不会有实例字段,可以将接口看成没用实例字段的抽象类。
  • 接口中的字段总是public static final的
  • Java中虽然不能够多继承,但是可以用一个类实现多个接口,从而达到了多继承的效果。(这也是接口和抽象类的概念,虽然接口中在JDK8之前是抽象的,但是抽象类只能被继承一个,而接口可以被实现多个)
  • 在接口中现在实现了定义方法内容,但是需要用到default、和static关键字才可以。
  • 在我们类重写接口方法时,我们不可以省略public关键字

二、接口的实际使用

  • 根据上面接口的特点,现在我们来演示一下,接口到底是怎么使用的。
public interface InterfaceTest {
    int a = 0;
    public static final int b = 0;//public static final可以省略不写
    void sum1();
    public abstract void sum2();// public abstract可以省略不写
    static void test1() {
        System.out.println("static可以实现在接口中定义方法内容,此方法不推荐具体用法可自行学习,这也是Java8的新特性");
    }
    default void test2() {
        System.out.println("default可以实现在接口中定义方法内容,并且此方法没必要去类中实现");
    }
}
class Test1 implements InterfaceTest{
    @Override
    public void sum1() {
        System.out.println("此方法必须在类中去实现");
    }
    @Override
    public void sum2() {
        System.out.println("此方法必须在类中去实现");
    }
}

欢迎大家来到IT世界,在知识的湖畔探索吧!

  • 接口的属性:
  1. 接口不是类,所以不可以使用new运算符实例化一个接口。x = new Comparable();❌
  2. 但是我们可以使用接口去声明一个变量 Comparable x;✔
  3. 我们可以使用接口变量去引用实现了这个接口的类
欢迎大家来到IT世界,在知识的湖畔探索吧!public static void main(String[] args) {
        InterfaceTest inter = new Test1();//跟多态差不多
        if(inter instanceof InterfaceTest) {//同样可以使用instanceof判断,这个肯定为true了
            inter.sum1();
            inter.sum2();
            inter.test2();
        }
    }
  • 实现多接口的写法:public class Employee extends Person implements Comparable,Collection,…

三、解决默认方法冲突

  • 产生原因:一个类继承了另一个类的同时,又实现了一个接口,当此接口于父类都拥有相同的方法时,他就会产生冲突,那么会哪个优先呢?我们来看一下吧
class Father {
    public void sum1() {
        System.out.println("我是父亲的sum1");
    }
    public void test2() {
        System.out.println("我是父亲的test2");
    }
}
class Son extends Father implements InterfaceTest{
    @Override
    public void sum1() {//在我们重写方法是不可以省略public
        System.out.println("此方法必须在类中去实现,我是儿子sum1");
    }
    @Override
    public void sum2() {
        System.out.println("此方法必须在类中去实现");
    }

    public static void main(String[] args) {
        InterfaceTest inter = new Son();
        if(inter instanceof InterfaceTest) {
            inter.sum1();//经过测试发现,和多态性一样,优先调用子类
            inter.sum2();
            inter.test2();//经过测试发现,这个default的情况是,父类优先
        }
    }
}
  • 最终就是记住“类优先”原则。

四、接口回调

  • 如果说父类实现了某个接口,那么子类继承父类时候,自然实现了该接口,没用必要再实现了。
  • 在我刚接触这个”接口回调“一次时,我觉得非常的高大上。
  • 其实就是简单的多态应用
  • 假设Com是一个接口,ImpleCom()是该接口的实现类,则Com c = new ImpleCom();
  • 在调用方法是仍然和多态一样。可以把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量—->Com c = new ImpleCom();,那么该接口变量 c 就可以调用被类实现的接口方法以及接口提供的default方法或者类重写的default方法。
    其实真没啥可说的,就是这个 c 既可以调用从接口那里实现过来的方法,也可以调用自身的方法。

本文来自https://www.cnblogs.com/lx-meteor/p/16100914.html

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/35759.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信