什么是接口?

接口是更加彻底的抽象,在JDK 1.8之前接口中只能是抽象方法和常量。
接口体现的是规范思想,实现接口的子类必须重写完接口的全部抽象方法。


接口的基本定义格式:

修饰符 interface 接口名称{...
}

JDK1.8后接口当中可以包含的组成部分:

1.抽象方法
2.常量
3.默认方法(Java 8)
4.静态方法(Java 8)
5.私有方法(Java 9)

1.默认方法: 其实就是我们之前写的实例方法。
只能用接口的实现类的对象来调用default void run() {System.out.println ("默认方法");
}2.静态方法:可以直接static修饰。默认会public修饰。
static void inAddr () {System.out.println("静态方法");
}3.私有方法:私有的实例方法。
private void go() {}

1.接口中定义一个抽象方法:

public abstract 返回值类型 方法名称(参数类型 参数名称);
  • 注意:
    1.接口中的抽象方法,修饰符如果写必须是:public abstract
    2.接口中的抽象方法,修饰符可以省略不写,默认是:public abstract
    3.抽象方法只有方法头,不能有方法体大括号。
public interface Animal {//定义了一个抽象方法,吃东西public abstract void eat();//定义了一个抽象方法,睡觉//省略了public abstract也照样是抽象方法/*public abstract*/ void sleep();
}

2.定义一个接口使用类

如果想要使用定义好的接口,必须要有一个“实现类”

  • 定义实现类的格式:
public class 实现类名称 implements 接口名称{一定要覆盖重写所有的抽象方法
}
  • 什么是覆盖重写(Override)的抽象方法?
    1.将接口当中的抽象方法抄过来
    2.去掉abstract关键字
    3.写上大括号方法体

Cat就是Animal接口的实现类,Cat类实现了Animal类

public class Cat implements Animal{public void eat() {System.out.println("猫吃鱼");};public void sleep() {System.out.println("猫睡觉");};//这是一个Cat特有的方法,接口中并没有定义public void cathMouse() {System.out.println("猫抓老鼠");}
}
public class Dog implements Animal{public void eat() {System.out.println("吃骨头");}public void sleep() {System.out.println("狗睡觉");}//特有方法public void watchHouse() {System.out.println("狗看家");}
}

如何使用接口与实现类?

  • 1.创建
    接口名称 引用名 = new 实现类名称();

  • 2.调用
    引用名.抽象方法名(参数);

  • 注意:
    1.(接口隔离)左边是接口类型,只能调用接口当中定义好的内容,不能调用右侧实现类中特有的内容。
    2.当调用接口中的抽象方法时,真正进行运行的是右侧new的时候类的具体方法内容。
    3.调用的时候看左边,运行的时候看右边。

public class InterFace {public static void main(String[] args) {//创建:Animal cat = new Cat();//调用接口当中定义好的抽象方法cat.eat();  //猫吃鱼cat.sleep();    //猫睡觉//     cat.catchMouse();  错误,无法调用右侧实现类专有的方法,只能调用接口的方法}
}

使用接口作为左侧类型的好处所在:
屏蔽掉了右侧的个性特有内容,达到隔离统一的目的。

public class InterFace {public static void main(String[] args) {Cat cat = new Cat(); // 创建一只猫       method(cat);//间接使用eat和sleep方法Dog dog = new Dog();// 创建一只狗method(dog);}//使用一个自定义的类作为参数类型public static void method(Cat cat) {cat.eat();cat.sleep();}public static void method(Dog dog) {dog.eat();dog.sleep();}
}

接口的成员特点

  • 成员变量
    只能是常量
    默认修饰符:public static final
  • 构造方法
    接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在
    一个类如果没有父类,默认继承自Object类
  • 成员方法
    只能是抽象方法
    默认修饰符:public abstract

面向接口编程:

如果使用的功能,接口已经可以满足,那么就不在乎具体的类是谁,只在乎接口即可。

使用接口作为左侧类型的好处所在:
屏蔽掉了右侧的个性特有内容,达到隔离统一的目的。

public class InterFaceBetter {public static void main(String[] args) {Cat cat = new Cat(); // 创建一只猫     method(cat);//间接使用eat和sleep方法Dog dog = new Dog();// 创建一只狗method(dog);}//使用接口作为参数类型,就不用区分到底是猫还是狗public static void method(Animal animal) {animal.eat();animal.sleep();
//      animal.watchHouse();  错误,无法调用狗的专有方法
//      animal.catchMouse();  错误,无法调用猫的专有方法}}

接口与类的多继承

类与类是单继承关系:一个类只能继承一个直接父类。
类与接口是多实现关系:一个类可以同时实现多个接口。
接口与接口是多继承关系:一个接口可以同时继承多个接口。


使用接口的注意事项

  1. 如果实现了多个接口,多个接口中存在同名的静态方法并不会冲突,
    原因是 只能通过各自接口名访问静态方法。

  2. 当一个类继承一个父类,又实现若干个接口时,父类中的成员方法与接口中的默认方法重名,子类就近选择执行父类的成员方法。

  3. 当一个类实现多个接口时,多个接口中存在同名的默认方法。
    实现类必须重写这个方法。

  4. 接口中没有构造器,不能创建对象。
    接口是更彻底的抽象,连构造器都没有,自然不能创建对象。

Java 接口的定义、接口的成语、接口的实现、接口与类的多继承、JDK1.8后新增方法、使用接口的注意事项相关推荐

  1. java int64如何定义_java – 具有两个int属性的自定义类的hashCode是什么?

    在 Java中,我有一个类表示一个具有int坐标的点 public class Point { int x = -1; int y = -1; public Point (int xNew, int ...

  2. java对象流定义_Java 对象流的用法,将自定义类数组写入文件中

    FileInputStream和FileOutputStream可以将类,数组,等写入如文件并读取. public class UserList implements Serializable{ pu ...

  3. java如何枚举定义一个数组_Java中如何将字符枚举类变成一个数组

    ( light. class ); currenummap.put(light. red , " 红灯 " ); currenummap.put(light. green , &q ...

  4. java final类的写法_重拾JavaSE基础——抽象类、接口、代码块、final和枚举

    今天继续回顾Java基础,有些东西用得不多,大家看看知道语法就好 主要内容 抽象类 抽象方法 抽象方法的写法 抽象方法是否可以私有化 抽象类的特征 抽象类有无构造器,能否实例化对象 抽象类的结构 抽象 ...

  5. java接口如何定义常量 c_在Java接口中怎样访问定义的常量呢?

    java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能).那么我们在Java接口中怎 ...

  6. java类接口实验_实验3_Java类的继承和接口的定义和使用

    本次有三题:学会Java类的继承.接口的定义和使用 // Ex3_1.java /** * 题目要求: * 修改例5.7(P95)实现在页面中拖动鼠标画出矩形,矩形的对角线为点击并拖动鼠标形成的直线线 ...

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

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

  8. java中接口的定义与实现

    1.定义接口     使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] in ...

  9. java批量删除接口怎么定义_教你在Java接口中定义方法

    基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. 假设我们现在有一个接口:TimeClie ...

最新文章

  1. [LeetCode]Gray Code
  2. 宁波大学计算机网络实验五,宁波大学计算机网络实验答案.doc
  3. nginx的函数调用
  4. wps怎么投递简历发到boss直聘_央视新闻联合BOSS直聘带“岗”年薪超82亿元
  5. 一个小技巧 禁止浏览器弹出Alert
  6. icoding复习1,2
  7. php 随机在文章中添加锚文本_SEO站长布局锚文本时的7大注意事项
  8. 2020年线上农产品消费趋势报告
  9. Linux内存管理:kmemcheck介绍
  10. 【鱼眼镜头4】[鱼眼畸变模型]:四阶多项式模型
  11. python连接服务器完整过程
  12. 什么是有监督学习?看这里。
  13. 什么是用户实体行为分析(UEBA)
  14. python基础篇{数据类型}
  15. 网页打开QQ链接,进行临时会话
  16. wms地图绘制工具_三维离线地图-三维地图开发,三维地球,三维可视化开发
  17. ibm刀片服务器虚拟化,IBM刀片服务器虚拟化方案
  18. 年度工作计划和工作总结PPT模板
  19. 服务器虚拟化有哪些方面,服务器虚拟化技术有哪些
  20. java 基本数据类型所占字节数及其范围

热门文章

  1. Graham扫描法求解凸包问题(C++)
  2. series转换成dataframe
  3. Linux进程通信的试验
  4. C#行转列绑定DGV
  5. 人和摩托最快达到目的地
  6. Windows系统图片不显示缩略图如何解决
  7. Redis ZADD命令
  8. 前端初学阶段总结与笔记
  9. linux和win10文件共享smb,Windows 10 Samba文件共享的设置方法,解决不能访问和密码错误的问题...
  10. Android系统各个版本系统特性整理(1.1-6.0)