抽象类与接口

一.抽象类

1.抽象类概述

在java中,一个没有方法体的方法的方法定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类

2. 抽象类的特点

  • 抽象类和抽象方法必须使用abstract关键字进行修饰

public abstract class 类名{}

public abstract void 方法名()

  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
  • 抽象类只能参照多态的方式,通过子类对象实例化,这叫抽象类多态
  • 抽象类的子类只有两种可能,要么重写抽象类中的抽象方法,要么是抽象类。

3.抽象类的成员特点

  • 成员变量

成员变量可以是变量,也可以是常量。

  • 构造方法

抽象类有构造方法,但是不能实例化。而构造方法则主要用于子类访问父类数据的初始化。

  • 成员方法

可以有抽象方法:限定子类必须完成某些动作

也可以有非抽象方法:提高代码复用性

二.接口

1.接口概述

接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。而Java中的接口更多的体现在对行为的抽象

2.接口的特点

  • 接口用关键字interface修饰

public interface 接口名{}

  • 类实现接口用implements表示

public class 类名 implements 接口名{}

  • 接口的实例化

接口不能直接实例化,只能参照多态的方式,通过实现类对象实例化,这叫接口多态。

  • 接口的实现类

和抽象类的子类一样,接口的实现类要么重写接口中的所有抽象方法,要么是抽象类。

3.接口的成员特点

  • 成员变量

只能是常量,且具有默认的修饰符:public static fianal

  • 构造方法

接口没有构造方法,因为接口主要是对行为进行抽象的,没有具体存在。一个类没有父类,则默认继承自object类。

  • 成员方法

接口中的成员方法只能是抽象方法,因为其具有默认修饰符:public abstract

三.抽象类和接口的区别

1.语法区别

  • 成员区别
成员区别
抽象类 变量,常量;有构造方法;有抽象方法,也有非抽象方法
接口 常量,抽象方法
  • 关系区别
关系区别
类与类 继承,单继承
类与接口 实现,可以单实现,也可以多实现
接口与接口 继承,单继承,多继承

2.设计理念区别

接口的设计目的,是对类的行为进行“约束”,也就是提供一种机制,可以强制要求不同的类也能具有相同的行为。接口只约束了行为的有无,而不对如何实现行为进行限制,所以接口大多都是对行为进行抽象。而抽象类的设计目的,则是为了代码复用。分析对象,提炼其内部共性形成抽象类,用以表示对象本质,所以抽象类是对类的抽象,包括类的属性和行为。因此,开发者在使用时,使用动机也不同。开发者继承抽象类是为了使用抽象类的属性和行为,开发者实现接口只是为了使用接口的行为。

总之,抽象类是对事物的抽象,而接口是对行为的抽象。