jdk8下的接口和抽象类
2024-09-06 17:48:55
接口
在java8中,接口可以定义变量和方法,其中变量必须为 public && static && final;
方法必须为public && (abstract || default || static)。
jdk8只能通过接口类调用接口中的静态方法,但是对于default方法来说,如果两个接口中定义了相同方法签名的default方法,且实现类同时继承了两个接口。则在编译时会报错。此时可以让实现类重写该方法。
抽象类
包含一个或多个抽象方法的类,必须被申明为抽象类。
但不是抽象类中所有的方法都是抽象方法,除了抽象方法外,抽象类还可以拥有具体的方法以及具体数据
一个类如果继承一个抽象类,必须实现该抽象类里声明的抽象方法
区别 | 抽象类 | 接口 |
---|---|---|
继承/实现 | 只允许继承单个抽象类,可以不实现所有的抽象方法,但是子类也必须申明为抽象类 | 可以继承多个接口,但继承的类必须实现所有接口的所有抽象方法 |
变量 | 可以有具体的变量 | 只能有静态常量 public static final |
方法 | 抽象类的方法可以是public,protected,default,但是不允许private | 接口的方法必须是public,可以有抽象abstract,默认defualt,静态static |
构造函数 | 拥有默认构造函数 | 无构造函数 |
子类实现 | Extends | Implment |
设计理念和使用场景 | 是对同一个类型下共有的特性抽象。抽象类是一种 自下而上 的设计,先有了子类,然后提取子类公有的特性与行为,构成抽象类。 抽象类与子类是 is-a 关系,父类和派生的子类在概念上是相同的,存在的是父子关系,是一种重耦合。 | 它定义了一种规范,更多的是辐射类型的设计。接口是一种 自上而下 的设计,先规定行为方法,然后由类去实现这些行为,就可以成为接口的实现类。接口与实现类是 like-a 关系,接口与实现类的关系只是定义了行为,本质上并无实质关系,只是契约层面的关系。 |
最新文章
- 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore
- 应用市场中包名(package name)的唯一性
- Java邮件发送与接收原理
- PHP mkdir 0777权限问题
- C++术语俗解
- Hibernate的面试题
- CSS尺寸单位 % px em rem 详解
- Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析
- memcpy、memmove、memset
- jdom处理的XML Document 和String 之间的相互转化
- ubuntu ll命令
- XC通讯录
- 对于volatile的理解
- CoFun 1613 单词连接
- 随机获取部分List<;Object>;集合
- 使用hql动态创建对象问题
- 【BZOJ4764】弹飞大爷
- nginx安装ngx_lua_waf防护
- puppet确保程序运行
- 记录一次nginx配置vhost的小bug
热门文章
- 【MySql】[ERROR] Can't read from messagefile '/usr/share/mysql/english/errmsg.sys'
- ctfhub技能树—文件上传—文件头检查
- 【对线面试官】Java多线程基础
- pandas高级操作
- 原生ajax分享
- 大数据系列4:Yarn以及MapReduce 2
- pip freeze 需求文件requirements.txt的创建及使用 虚拟环境
- 你可能不知道的 transition 技巧与细节
- (十二)整合 Shiro 框架,实现用户权限管理
- redis性能优化、内存分析及优化