“接口”的定义及其与“抽象类”的区别
我们知道一个有抽象方法的类是抽象类,而当一个类中全是抽象方法时,就可以定义为接口(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开始(之前的都不行),可以声明具体方法,但必须为static或default】
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),但不能继承“类” |
“接口”的定义及其与“抽象类”的区别相关推荐
- 接口的意义及于抽象类的区别(蒋波涛)
插件式框架作为一个高耦合低聚合的系统,它的功能定义与功能实现之间是分离的,这种策略是高耦合实现的保证.插件式框架好像一个功能聚集站,它对外界宣布,只要符合它发布的某种规范的组件(实现接口的类通常称为组 ...
- [Java] 接口(Interface)与 抽象类 (Abstract)使用规则和区别
版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 接口(Interface) 是抽象方法的集合,接口通常以interface来声明. 一个类通过继承接口的方式,从而来继承接口的抽象 ...
- java 接口与抽象类的区别
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- 面试题:接口和抽象类的区别
区别一,两者表达的概念不一样.抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于"是"的关系:而接口是定义行为规范,因此对于实现接口的子类来说,相对于接 ...
- java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌
版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 接口:接口是抽象方法的集合.接口通常以interface来声明. 接口注意事项: 1.严格来说,接口是用来实现(i ...
- c#接口和抽象类的区别
一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆 ...
- Java 接口和抽象类的区别
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的.接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static f ...
- OOP接口与抽象类的区别
抽象类和接口的区别: 1.两者表达的概念不一样.抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于"是"的关系:而接口是定义行为规范,因此对于实现接口的 ...
- java 关注公众号没有调接口_高频面试题:接口和抽象类的区别
作为一个基础的Java高频面试题,是所有Java面试者必须烂熟于心的.当然不能死记硬背,可以通过实际地写几个小demo,边实际操作边理解,既能感受到编程的快乐,更重要的是真的理解记住了二者的区别. 此 ...
最新文章
- Handler 实现的一个延时操作
- flask token 登录验证
- python——def自定义函数的应用
- Android开发者指南(4) —— Application Fundamentals
- JavaScript的toString()和valueOf()函数
- 《OpenGL ES 3.x游戏开发(下卷)》一1.2 顶点数组对象
- 学习旧岛小程序 (1) flex 布局
- AS3.0面向对象的写法,类和实例
- 深度学习TensorFlow生产环境部署(模型部署篇)
- 初始化 数组 java_如何用Java初始化数组
- 原生JS与其他JS 区别
- morning 是字符串的内容变成good_小洁详解《R数据科学》--第十章 使用stringr处理字符串(上)...
- 系统——现有centos7操作系统制作为iso镜像文件
- 【BZOJ 3653】谈笑风生
- 在google提交sitemap地图后的蜘蛛爬取效果
- GB2312介绍及字库使用
- Mac的最新版本JDK下载失败的解决方法
- C++输入一行数字存放到数组
- [附源码]Python计算机毕业设计飞羽羽毛球馆管理系统
- Win11系统默认英文字体怎么修改成为中文