前言

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

    -下面我们正式进入正题吧<( ̄︶ ̄)[GO!]

一、接口

1.接口的概念

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

2.什么是实例字段

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

3.接口的特点

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

二、接口的实际使用

  • 根据上面接口的特点,现在我们来演示一下,接口到底是怎么使用的。
  1. public interface InterfaceTest {
  2. int a = 0;
  3. public static final int b = 0;//public static final可以省略不写
  4. void sum1();
  5. public abstract void sum2();// public abstract可以省略不写
  6. static void test1() {
  7. System.out.println("static可以实现在接口中定义方法内容,此方法不推荐具体用法可自行学习,这也是Java8的新特性");
  8. }
  9. default void test2() {
  10. System.out.println("default可以实现在接口中定义方法内容,并且此方法没必要去类中实现");
  11. }
  12. }
  13. class Test1 implements InterfaceTest{
  14. @Override
  15. public void sum1() {
  16. System.out.println("此方法必须在类中去实现");
  17. }
  18. @Override
  19. public void sum2() {
  20. System.out.println("此方法必须在类中去实现");
  21. }
  22. }
  • 接口的属性:
  1. 接口不是类,所以不可以使用new运算符实例化一个接口。x = new Comparable();
  2. 但是我们可以使用接口去声明一个变量 Comparable x;
  3. 我们可以使用接口变量去引用实现了这个接口的类
  1. public static void main(String[] args) {
  2. InterfaceTest inter = new Test1();//跟多态差不多
  3. if(inter instanceof InterfaceTest) {//同样可以使用instanceof判断,这个肯定为true了
  4. inter.sum1();
  5. inter.sum2();
  6. inter.test2();
  7. }
  8. }
  • 实现多接口的写法:public class Employee extends Person implements Comparable,Collection,...

三、解决默认方法冲突

  • 产生原因:一个类继承了另一个类的同时,又实现了一个接口,当此接口于父类都拥有相同的方法时,他就会产生冲突,那么会哪个优先呢?我们来看一下吧
  1. class Father {
  2. public void sum1() {
  3. System.out.println("我是父亲的sum1");
  4. }
  5. public void test2() {
  6. System.out.println("我是父亲的test2");
  7. }
  8. }
  9. class Son extends Father implements InterfaceTest{
  10. @Override
  11. public void sum1() {//在我们重写方法是不可以省略public
  12. System.out.println("此方法必须在类中去实现,我是儿子sum1");
  13. }
  14. @Override
  15. public void sum2() {
  16. System.out.println("此方法必须在类中去实现");
  17. }
  18. public static void main(String[] args) {
  19. InterfaceTest inter = new Son();
  20. if(inter instanceof InterfaceTest) {
  21. inter.sum1();//经过测试发现,和多态性一样,优先调用子类
  22. inter.sum2();
  23. inter.test2();//经过测试发现,这个default的情况是,父类优先
  24. }
  25. }
  26. }
  • 最终就是记住“类优先”原则。

四、接口回调

  • 如果说父类实现了某个接口,那么子类继承父类时候,自然实现了该接口,没用必要再实现了。
  • 在我刚接触这个"接口回调"一次时,我觉得非常的高大上。
  • 其实就是简单的多态应用
  • 假设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. KDT入门小讲

    KDT入门小讲 为了搞讲课两天搞出来的PPT,质量不高,随便看看 附:讲课用PPT 链接: https://pan.baidu.com/s/1qHea0fEhscAsQh8-Yu_j_A 提取码: 4 ...

  2. 从零开始,开发一个 Web Office 套件(11):支持中文输入法(or 其它使用输入法的语言)

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  3. [C++]C风格、C++风格和C++11特性的线程池

    线程池概念 假设完成一项任务需要的时间=创建线程时间T1+线程执行任务时间T2+销毁线程时间T3,如果T1+T3的时间远大于T2,通常就可以考虑采取线程池来提高服务器的性能 thread pool就是 ...

  4. MySQL 字符集相关

    为了支持各个国家的不同语言,MySQL 从4.0 版本开始支持了很多种字符集,且每种字符集支持了 N 多种排序规则.我们可以在建表的时候指定字符集的排序规则,不指定时会有一个默认规则. 字符集和排序规 ...

  5. 《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)

    1.简介 经过前边几篇知识点的介绍,今天宏哥就在实际测试中应用一下前边所学的依赖测试.这一篇主要介绍在TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用de ...

  6. 前端知识之html基础

    前端知识之html内容 web服务本质 浏览器发送请求-->http协议-->服务端接收请求-->服务端返回响应-->服务端把html文件内容发给浏览器-->浏览器渲染页 ...

  7. 使用ipmitool工具来使用串口连接远程主机

    https://www.ibm.com/developerworks/cn/linux/l-ipmi/index.html ipmitool -H 9.13.2.213 -U root -P xxxx ...

  8. synchronized底层实现原理及锁优化

    一.概述 1.synchronized作用 原子性:synchronized保证语句块内操作是原子的 可见性:synchronized保证可见性(通过"在执行unlock之前,必须先把此变量 ...

  9. Error和Exception有什么区别?

    Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题:比如内存溢出,不可能指望程序能处理这样的情况:Exception表示需要捕捉或者需要程序进行处理的异常, ...

  10. Oracle入门基础(十三)一一java调用oracle存储过程

    package demo; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultS ...