我们知道一个有抽象方法的类是抽象类,而当一个类中全是抽象方法时,就可以定义为接口(interface)

  • 接口命名通常以“I”开头;
  • 接口中的方法默认有public abstract(所以可以省略);
  • 接口中的变量默认有public static final(静态常量),因此可以通过接口名直接调用,例如:
public interface IMammal{public abstract void move();void sleep();               //默认有public abstractint AGE = 20;              //常量通常用大写字母
}
public class Test{public static void main(String[] args) {System.out.println(IMammal.AGE);   //输出结果:20}
}
  • 不同于“类”与“类”之间继承时为单继承一个接口可以继承多个其他接口
  • 抽象类虽不能创建对象,但可以构造方法,而接口中两者都不可以,例如:
interface IA{}
interface IB{}
public interface IMammal extends IA,IB{ //继承多个其他接口/*public IMammal(){}                  //这是错的×,接口中不可以构造方法*/
}
  • 同时接口中也不能定义具体方法,
    【但从JDK8开始(之前的都不行),可以声明具体方法,但必须为staticdefault
public interface IMammal {/*public void bite(){System.out.println("正在咬...");   //这是错的×}*/public static void eat(){System.out.println("正在吃...");}public default void play(){System.out.println("正在嬉戏...");}
}
  • 一个“类”继承“接口”时,要用implements,而不能用extends;
  • 和接口的继承相同,一个类也可以继承多个接口;
  • 一个类如果不实现接口中的所有抽象方法(即重写),则该类必须为抽象类;
  • 一个类继承接口的同时,也就继承了接口中的常量,
    例如:上面定义过的静态常量AGE,当一个类继承该接口时,也就可以通过该类的类名直接调用;
public class Cat implements IMammal,IA{@Overridepublic void move(){System.out.println("正在屋顶上飞奔...");}@Overridepublic void sleep(){System.out.println("正在蜷缩着睡觉...");}
}
public class Test{public static void main(String[] args) {System.out.println(Cat.AGE);   //输出结果:20}
}

需要注意的两点:

  • 接口只能继承父接口(一个或多个),不能继承类(包括普通类和抽象类);
  • 接口继承接口、类继承类 用extends,类继承接口 用implements

总结一下抽象类与接口的区别

抽象类 接口
关键字 abstract interface
成员变量 可包含任意合法成员变量 只包含静态常量(默认public static final)
构造方法 有构造方法 无构造方法
方法 可定义任意合法的方法 JDK8之后(之前不可)可以通过static或default修饰声明具体方法
继承 “类”与“类”之间只能是单继承(用extends),但一个类可以继承多个接口(用implements) 一个接口可以继承多个父接口(用extends),但不能继承“类”

“接口”的定义及其与“抽象类”的区别相关推荐

  1. 接口的意义及于抽象类的区别(蒋波涛)

    插件式框架作为一个高耦合低聚合的系统,它的功能定义与功能实现之间是分离的,这种策略是高耦合实现的保证.插件式框架好像一个功能聚集站,它对外界宣布,只要符合它发布的某种规范的组件(实现接口的类通常称为组 ...

  2. [Java] 接口(Interface)与 抽象类 (Abstract)使用规则和区别

    版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 接口(Interface) 是抽象方法的集合,接口通常以interface来声明. 一个类通过继承接口的方式,从而来继承接口的抽象 ...

  3. java 接口与抽象类的区别

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  4. 面试题:接口和抽象类的区别

    区别一,两者表达的概念不一样.抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于"是"的关系:而接口是定义行为规范,因此对于实现接口的子类来说,相对于接 ...

  5. java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 接口:接口是抽象方法的集合.接口通常以interface来声明. 接口注意事项: 1.严格来说,接口是用来实现(i ...

  6. c#接口和抽象类的区别

    一.抽象类:       抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆 ...

  7. Java 接口和抽象类的区别

    接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的.接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static f ...

  8. OOP接口与抽象类的区别

    抽象类和接口的区别: 1.两者表达的概念不一样.抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于"是"的关系:而接口是定义行为规范,因此对于实现接口的 ...

  9. java 关注公众号没有调接口_高频面试题:接口和抽象类的区别

    作为一个基础的Java高频面试题,是所有Java面试者必须烂熟于心的.当然不能死记硬背,可以通过实际地写几个小demo,边实际操作边理解,既能感受到编程的快乐,更重要的是真的理解记住了二者的区别. 此 ...

最新文章

  1. Handler 实现的一个延时操作
  2. flask token 登录验证
  3. python——def自定义函数的应用
  4. Android开发者指南(4) —— Application Fundamentals
  5. JavaScript的toString()和valueOf()函数
  6. 《OpenGL ES 3.x游戏开发(下卷)》一1.2 顶点数组对象
  7. 学习旧岛小程序 (1) flex 布局
  8. AS3.0面向对象的写法,类和实例
  9. 深度学习TensorFlow生产环境部署(模型部署篇)
  10. 初始化 数组 java_如何用Java初始化数组
  11. 原生JS与其他JS 区别
  12. morning 是字符串的内容变成good_小洁详解《R数据科学》--第十章 使用stringr处理字符串(上)...
  13. 系统——现有centos7操作系统制作为iso镜像文件
  14. 【BZOJ 3653】谈笑风生
  15. 在google提交sitemap地图后的蜘蛛爬取效果
  16. GB2312介绍及字库使用
  17. Mac的最新版本JDK下载失败的解决方法
  18. C++输入一行数字存放到数组
  19. [附源码]Python计算机毕业设计飞羽羽毛球馆管理系统
  20. Win11系统默认英文字体怎么修改成为中文

热门文章

  1. Django-C002-深入模型,到底有多深
  2. 洛谷P3159 [CQOI2012]交换棋子
  3. VirtualBox上Ubuntu 共享文件夹
  4. 5个在线调试代码的网站
  5. (转载)Linux usbtouchscreen驱动分析
  6. jsp中如何判断el表达式中的BigDecimal==0
  7. 'or'='or'经典漏洞原理分析
  8. Linux下各类TCP网络服务器的实现源代码
  9. 使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图
  10. 家庭局域网开启AP隔离利用无线路由器互连