java不支持多继承性,即一个类只能有一个父类。(单继承性)

为了解决单继承的缺点,java使用了接口

接口是一种引用数据类型,最重要的内容是抽象方法

(public) interface 接口名称{//接口内容
}

接口声明时,如果关键字interface前面加上public->public接口,可以被任何一个类使用

如果一个接口不加public修饰->友好接口类,可以被同一个包中的类使用

java7接口中可以包含

1、常量

2、抽象方法

java8接口中额外包含:

3、默认方法

4、静态方法

java9接口额外包含:

5、私有方法

接口抽象方法:

注意:
1、接口当中的抽象方法,修饰符必须是两个固定的关键字,public abstract

2、这两个关键字修饰符,可以选择性地省略

使用:

1、接口不能直接使用。必须有一个实现类来实现接口

格式:
public  class 类名称 implements 接口名称{

//..

}

2、接口的实现类必须覆盖重写接口中所以的抽象方法

重写接口中的方法,访问权限一定时public

3、创建实现类的对象,进行调用

public interface MyInterface {public abstract void method();void method1();
}public class a implements MyInterface{@Overridepublic void method() {System.out.println("这是第一个方法");}@Overridepublic void method1() {System.out.println("这个是第二个方法");}
}public class b {public static void main(String[] args) {a aa=new a();aa.method();aa.method1();}
}

如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己必须是一个抽象类

接口的默认方法:

格式:
public default 返回值类型 方法名称(参数列表){

方法体

}

public可以省略

接口中的默认方法

1、可以解决 接口升级的问题

2、可以和函数式编程结合

如果一个接口有已经定义许多个子类,但是如果在接口中又新增了一个方法(这个方法如果不另加说明为抽象方法),为了让子类都覆盖了抽象方法,就不得不在每一个子类中都覆盖这个新加 的抽象方法,但是这样又会很麻烦。

所以可以把新添加的方法改为默认方法

public interface MyInterface {
void method();
public default void method1(){System.out.println("新添加的方法");
}}
public class a implements MyInterface {@Overridepublic void method() {}}public class b {public static void main(String[] args) {
a aa=new a();
aa.method();
aa.method1();}
}

接口的默认方法会被子类继承,可以由子类调用

这样就可以不用全部都重新覆盖,但子类仍然可以调用新添加的方法

注意:接口的默认方法也可以被子类覆盖重写

接口的静态方法:

public static 返回值 方法名称(参数名称){

方法体

}

public可以省略

不能通过接口实现类的对象来调用接口当中的静态方法

通过接口名称,直接调用其中的静态方法:

接口名称.静态方法名(参数)

public interface MyInterface {
public static void method1(){System.out.println("调用静态方法");
}
}public class b {public static void main(String[] args) {MyInterface.method1();}
}

接口的私有方法:

如果需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题。

但是这个共有方法不应该让实现类使用,应该是私有化的。

所以,应该把这个共有方法实设为私有的

1、普通私有方法,解决多个默认方法之间重复代码问题:

private 返回值类型 方法名称(参数列表){

方法体}

2、静态私有方法,解决多个静态方法之间重复代码问题:

格式:
private static 返回值 方法名称(参数列表){

方法体}

public interface MyInterface {
public default  void method1(){method();
}
public default void method2(){method();
}
private void method(){System.out.println("111");
}
}
public class a implements MyInterface {}
public class b {public static void main(String[] args) {a aa=new a();aa.method1();aa.method2();}
}
public interface MyInterface {
public static   void method1(){method();
}
public static void method2(){method();
}
private static void method(){System.out.println("111");
}
}
public class a implements MyInterface {}
public class b {public static void main(String[] args) {MyInterface.method1();MyInterface.method2();}
}

接口的常量

接口当中也可以定义”成员变量“,但是必须使用public static final 三个关键字进行修饰

从效果上看,其实是接口的【常量】

public static final 数据类型 常量名称=数据值;

注意:

(1)一旦使用final关键字进行修饰,说明不可改变

(2)接口中的常量,可以省略【public】 【static】 【final】 ,注意,不写照样也是这样

(3)接口中的常量,必须进行赋值,不能不赋值

(4)常量的命名为大写,且用下划线分割

常量的使用:

public interface MyInterface {
public static final int NUM=10;
}
public class b {public static void main(String[] args) {System.out.println(MyInterface.NUM);}
}

使用接口时候,需要注意:、

1、接口是没有静态代码块或者构造方法的

2、一个类的直接父类是唯一的,但是一个类可以同时实现多个接口

public class MyInterface implements MyInterfaceA,MyInterfaceB{//覆盖重写所有抽象方法
}

接口也是可以被继承的,可以通过关键字extends声明一个接口是另一个接口的子接口,(public)子接口将继承父接口中全部方法和常量

接口与接口之间是多继承的

Public interface MyInterface extends MyInterfaceA,MyinterfaceB{}

(1)多个父接口当中的抽象方法如果重复没有关系

(2)多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写【带default关键字】

(3)父类实现了某个接口,那么子类就自然实现了该接口,子类不必再显示地使用关键字Implements声明

3、如果实现类所实现的多个接口中,存在重复的抽象方法,那么只需要覆盖重写一次

4、如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类

5、如果实现类所实现的多个接口当中,存在重复的默认方法,那么类一定要对冲突的默认方法进行覆盖重写

6、一个类如果直接父类当中的方法和接口当中默认方法产生了冲突,优先用父类当中的方法

【java笔记】接口的定义,接口的使用相关推荐

  1. java笔记之抽象类和接口

    前言 java笔记之抽象类和接口是开发人员的设计工具 正文 1.抽象类 客观存在的一类事物,当这类事物都是抽象的,无法具体的描述. 1)语法: 修饰符 abstract class 类名{ } 2)特 ...

  2. Java笔记:抽象类和接口

    Java笔记:抽象类和接口 抽象类 接口 接口多重实现 接口继承接口 嵌套接口 工厂模式 抽象类 在普通类中,一个类必须实现自身写的所有方法,每个方法必须含有自己的方法体.即便先创建一个父类,再由后续 ...

  3. 【java笔记】常用函数式接口(4):Funtion接口

    ​​​​​​​​​​​​​​[java笔记]常用函数式接口(1):Supplier接口_m0_52043808的博客-CSDN博客 [java笔记]常用接口(2):Consumer接口_m0_5204 ...

  4. 【java笔记】常用函数式接口(1):Supplier接口

    [java笔记]常用接口(2):Consumer接口_m0_52043808的博客-CSDN博客 [java笔记]常用函数式接口(3):Predicate接口_m0_52043808的博客-CSDN博 ...

  5. JAVA笔记:shape类(接口,继承,lambda表达式...)

    目录 写一段程序,实现shape面积,并可以对面积大小排序 定义父类shape类,并定义方法Area() 定义第一个子类Circle类 定义第二个子类Rect类 定义接口Comparator,并写入c ...

  6. Java笔记12-函数式接口

    主要内容 自定义函数式接口 函数式编程 常用函数式接口 第一章 函数式接口 概念 函数式接口在java中指的是:有且只有一个抽象方法的接口 函数式接口,即适用于函数式编程场景的接口.而java中共的函 ...

  7. 【java笔记】常用函数式接口(3):Predicate接口

    有时候需要对某种类型的数据进行判断,从而得到一个boolean值结果,这是可以使用java,util.function.Predicate<T>接口 作用: 对某种数据类型的数据进行判断, ...

  8. PTA 7-2 USB接口的定义(接口、接口变量、接口数组)

    7-2 USB接口的定义 (10 分) 定义一个USB接口,并通过Mouse和U盘类实现它,具体要求是: 1.接口名字为USB,里面包括两个抽象方法: void work():描述可以工作 void ...

  9. 【java笔记】泛型定义和使用

    为什么使用泛型 泛型的字面意思就是广泛的类型.利用泛型,同一套代码可以用于多种数据类型, 这样,不仅可以复用代码,降低耦合,而且可以提高代码的可读性和安全性 可读性:var s=new ArrayLi ...

  10. java接口如何定义常量 c_java接口定义常量研究

    背景 和同事讨论到,在接口中定义常量的问题,引发了争论,即,假如在接口中定义变量,是否需要用static来限定的问题,或者说用static和不用static会有什么区别. 引论 package spr ...

最新文章

  1. 一维码ITF 25简介及其解码实现(zxing-cpp)
  2. 微信9年:张小龙指明方向,微信AI全面开放NLP能力
  3. Java虚拟机的Heap监狱
  4. powergrep linux版本,PowerShell实现简单的grep功能
  5. 如何批量转化成jpg格式_heic图片格式快速转换jpg,批量转换方法
  6. 夫妻双双中标2018年NSFC青基,顺便说下之前心得
  7. python时间time模块介绍
  8. r语言library什么意思_医学统计与R语言:百分条图与雷达图
  9. tfs 2013 access deny
  10. rk3399_android7.1调试串口uart功能和测试是否能通讯
  11. Azure 基础:Blob Storage
  12. FFmpeg+dxva2 H265硬解码 下方出现绿条或被下方拉长
  13. android 设置壁纸上下显示不全,默认锁屏壁纸及锁屏壁纸被拉伸显示不全的问题...
  14. 8086CPU的14个寄存器全称
  15. 产品需求文档(PRD)
  16. 浅谈网游服务器的承载
  17. 如何使用swagger的API接口获取数据并且封装
  18. 不同场景下视频加密方案有哪些?
  19. 试用mmdetection
  20. 傲慢的上校的fragment讲解

热门文章

  1. ASP.NET画图全攻略(下)
  2. markdown数学公式
  3. Bailian2996 选课【置换】
  4. HDU2520 我是菜鸟,我怕谁【水题】
  5. math、numpy、pandas NaN 判断
  6. 面向对象——类设计(七)
  7. happy 2016, happy 11111100000
  8. PEP8——Python代码规范
  9. struts启动过滤器异常_SpringCloud Gateway高阶之全局异常处理
  10. linux如何使用鼠标数据的,浅析linux中鼠标数据读取