不积跬步,无以至千里;不积小流,无以成江海。

 

Java语言基础

 

抽象类与接口的区别

 

抽象类

在 Java 中,被关键字 abstract 修饰的类称为抽象类;被 abstract 修饰的方法称为抽象方法,抽象方法只有方法声明没有方法体。

抽象类有以下几个特点:

1. 抽象类不能被实例化,只能被继承。

2. 包含抽象方法的类一定是抽象类,但抽象类不一定包含抽象方法(抽象类可以包含普通方法)。

3. 抽象方法的权限修饰符只能为 public、protected 或 default,默认情况下为 public。

4. 一个类继承于一个抽象类,则子类必须实现抽象类的抽象方法,如果子类没有实现父类的抽象方法,那子类必须定义为抽象类。

5. 抽象类可以包含属性、方法、构造方法,但构造方法不能用来实例化对象,只能被子类调用。

 

接口

接口可以看成是一种特殊的类,只能用 interface 关键字修饰。

Java 中的接口具有以下几个特点:

1. 接口中可以包含变量和方法,变量被隐式指定为 public static final,方法被隐式指定为 public abstract(JDK 1.8 之前)。

2. 接口支持多继承,即一个接口可以继承(extends)多个接口,间接解决了 Java 中类不能多继承的问题。

3. 一个类可以同时实现多个接口,一个类实现某个接口则必须实现该接口中的抽象方法,否则该类必须被定义为抽象类。

 

 

抽象类和接口的区别

都具有的特征:

1. 接口和抽象类都不能被实例化,主要用于被其他类实现和继承。

2. 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

 

不同:

接口作为系统与外界交互的窗口,接口体现的是一种规范;

抽象类则不一样,抽象类作为系统中多个子类的共同父类,它所体现的是一种模板式设计。

参数 抽象类 接口
实现

子类使用extends关键字来继承抽象类,如果子类不是抽象类,

则需提供抽象类中所有声明方法的实现

子类使用 implements 关键字来实现接口,需要提

供接口中所有声明的方法的实现。

访问修饰符 可以用 public、protected 和 default 修饰 默认修饰符是 public,不能使用其它修饰符
方法 完全可以包含普通方法 只能包含抽象方法、静态方法、默认方法和私有方法,不能为普通方法提供方法实现
变量 既可以定义普通成员变量,也可以定义静态常量 只能定义静态常量,不能定义普通成员变量
构造方法 抽象类里的构造方法并不是用于创建对象,而是让其子类调用这些构造方法来完成属于抽象类的初始化操作 没有构造方法
初始化块 可以包含初始化块 不能包含初始化块
main 方法 可以有 main 方法,并且能运行 没有 main 方法
与普通Java类的区别 抽象类不能实例化,除此之外和普通 Java 类没有任何区别 是完全不同的类型
运行速度 比接口运行速度要快 需要时间去寻找在类种实现的方法,所以运行速度稍微有点慢

 

 

 

博客借鉴:http://c.biancheng.net/view/6551.html

 

posted on 2020-05-23 22:07  smile学子  阅读(159)  评论(0编辑  收藏  举报