前言

  • 前几篇文章我们已经把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("此方法必须在类中去实现");
}
}
  • 接口的属性:
  1. 接口不是类,所以不可以使用new运算符实例化一个接口。x = new Comparable();
  2. 但是我们可以使用接口去声明一个变量 Comparable x;
  3. 我们可以使用接口变量去引用实现了这个接口的类
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 既可以调用从接口那里实现过来的方法,也可以调用自身的方法。

五、结尾

  • 对于接口内容就总结这么多,希望大家可以多多练习。如果有不足之处,希望大家多多包涵,多多支持。如果有不懂的地方可以直接私信问我,欢迎来访!

    其实应该还有Lambda表达式,以及内部类的内容,但是这部分在基础中并不常用,我决定在后面补给大家。
  • 我将会继续更新关于Java的学习知识,感兴趣的小伙伴可以关注一下。
  • 文章写得比较走心,用了很长时间,绝对不是copy过来的!
  • 尊重每一位学习知识的人,同时也尊重每一位分享知识的人。
  • 你的点赞与关注,是我努力前行的无限动力。

Java基础之浅谈接口的更多相关文章

  1. Java基础之浅谈集合

    Java基础知识.关于List.Set.Map接口的了解,以及ArrayList.LinkedList.HashSet.TreeSet.HashMap.TreeMap...

  2. java基础(十七)----- 浅谈Java中的深拷贝和浅拷贝 —— 面试必问

    假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...

  3. Java基础之浅谈泛型

    简单的介绍了Java泛型类型的使用.上手容易,深入很难.

  4. 【Java基础】浅谈常见设计模式

    Num1:单例模式 基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 常见写法: 懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值 ...

  5. Java基础:浅谈数据输入流/数据输出流《DataInputstream类与DataOutputstream类》

     一.理论概述 数据输入/输出流(DataInputStream类与DataOutputStream类) 允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型. 说白了就是,当读取一个 ...

  6. Java基础之浅谈继承、多态

    一.继承的理解 继承:简单通俗的来讲,继承就是一个类继承另一个类,通常用extends表示继承. 继承的类叫子类,被继承的类叫父类. 子类可以使用父类的变量和方法,同时也可以重写父类的方法. 在Jav ...

  7. Java基础之浅谈异常与了解断言

    一.产生错误原因 用户输入错误 设备错误 物理限制 代码错误 二.解决错误---异常 在Java中异常对象都是派生于Throwable类的一个实例. 我们一般将异常分为两种:①Error和②Excep ...

  8. Java基础之抽象类与接口

    Java基础之抽象类与接口 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候 ...

  9. java反射机制浅谈

    一.Java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...

随机推荐

  1. layui 数据表格的使用(分页+总条数)

    下载地址 https://www.layui.com/ 点击实例,找到layui适合模板 2. 新建html将代码复制到对应模板,修改对应样式路径. 5.修改对应参数(url,field) 追加以下参 ...

  2. PHP实现二维数组(或多维数组)转换成一维数组

    1 array_reduce函数法 用array_reduce()函数是较为快捷的方法: $result = array_reduce($user, function ($result, $value ...

  3. 判断jQuery是否加载,如果未加载则加载

    一般情况返回的js这么写history.go(-1) 但是如果是从别人分享过来的,就没有反应 所以就做个判断,没有上一页就返回首页 if (typeof jQuery == 'undefined') ...

  4. python学习之matplotlib实战2

    import numpy as np import matplotlib.pyplot as plt def main(): #scatter fig = plt.figure() ax = fig. ...

  5. windows 2008 R2磁盘清理

    记录一次由于磁盘空间满,IIS使前端程序报500的事故 由于导出Api部署在IIS服务器,在程序调用导出Api会报500 发现windows服务器C盘已满 下面处理过程 只需复制cleanmgr.ex ...

  6. ZYNQ使用88E1510 PHY芯片的驱动程序

    SDK V2014.4 PHY 88E1510 PL端以太网,自协商 standalone应用程序 PL端设计,略. 根据PL端生成的hdf,新建项目,采用官方lwip echo server例程.发 ...

  7. ZYNQ生成一个工程的基本步骤

    Zynq 7000 SoC 是业界首款All Programmable SoC 组成: PL(FPGA部分) PS(ARM部分) PL和PS数据传输的 高效接口:AXI和ACP PS: 处理系统(Pr ...

  8. Django orm Q查询补充

    Q的简单用法 from django.db.models import Q q = Q() q.children.append(("username", "lyj&quo ...

  9. 关于MVC WebAPI 中加入任务调度功能的问题 (MVC WebAPI 任务调度)

    在MVC WebAPI中加入任务调度功能.即在MVC WebAPI启动时,启用任务调度程序. 但是这里有一个问题点,就是部署好IIS站点后,发现任务调度并没有启用.原因为何? 原因是部署好IIS站点后 ...

  10. kafka如何保证不重复消费又不丢失数据_Kafka写入的数据如何保证不丢失?

    我们暂且不考虑写磁盘的具体过程,先大致看看下面的图,这代表了 Kafka 的核心架构原理. Kafka 分布式存储架构 那么现在问题来了,如果每天产生几十 TB 的数据,难道都写一台机器的磁盘上吗?这 ...