抽象类与接口的区别
Posted dxj1016
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类与接口的区别相关的知识,希望对你有一定的参考价值。
抽象类
特点:
- 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
- 抽象类可以有普通成员变量和方法,也可以有静态成员变量和方法还有常量。
- 抽象类中可以有构造方法
- 抽象类不能有default的默认普通方法
- 抽象类可以有public,默认,protected修饰的抽象方法,没有private修饰的抽象方法
- 不能直接实例化,但是,如果它包含 main 方法的话是可以被调用的。
- 抽象类除了不能实例化对象之外,类的其它功能依然存在。
- 抽象类中不一定包含抽象方法,但是有抽象方法(只是声明,不包含方法体)的类必定是抽象类。
- 一个类只能继承一个抽象类
- 抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
抽象类:
接口
- 接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合。
- 接口中只有常量,不能有普通成员变量和方法,也不能有静态成员变量和方法。
- 接口中没有构造方法,
- 接口中可以有default的默认普通方法(java8中有的,java8之前没有)
- 接口中只能有public修饰的抽象方法,默认是public(java8有了default)
- 不能实例化接口的对象(java 8 已支持在接口中实现默认的方法)
- 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。
- 在接口中的所有方法必须都是抽象的,不能有非抽象的普通方法(java8后有了),即是只有方法的声明,没有方法体。
- 一个类可以实现多个接口
- 类如果要实现一个接口,它必须要实现接口声明的所有方法。
接口:
总结
比较两者语法细节区别的条理是:先从一个类中的构造方法、普通成员变量和方法(包括抽象方法),静态变量和方法,继承性等6个方面逐一去比较回答,接着从第三者继承的角度的回答。
特别注意java7和java8中接口和抽象类的变化
- 抽象类中可以有普通成员变量和方法,也可以有静态成员变量和方法还有常量。接口中只能有常量
- 抽象类中可以有构造方法,接口中不可以有构造方法
- 抽象类不能有default的默认普通方法,接口中有default的默认普通方法(这是java8中新增的特性)
- 抽象类可以有public,默认,protected修饰的抽象方法,没有private修饰的抽象方法。接口中只有public修饰,默认的时候是使用了public修饰符。
- 抽象类不能直接实例化,但是,如果它包含 main 方法的话是可以被调用的。接口中不能直接实例化,但是java8中有了default修饰的普通方法
- 抽象类除了不能实例化对象之外,类的其它功能依然存在。接口不是类,编写接口的方式和类,但是是两个不同的概念
- 抽象类中不一定包含抽象方法,但是有抽象方法(只是声明,不包含方法体)的类必定是抽象类。接口中的方法都是抽象方法(除了java8中出现的default方法)
- 一个类只能继承一个抽象类,一个类可以实现多个接口
- 抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。类如果要实现一个接口,它必须要实现接口声明的所有方法。
以上是关于抽象类与接口的区别的主要内容,如果未能解决你的问题,请参考以下文章