接口和抽象类的区别

一. 概念描述

1. 抽象类是对事物的抽象,强调继承关系。接口是对行为的抽象,强调实现。

2. 抽象类是对事物整体进行抽象,包括属性和行为。接口是对类局部行为进行抽象。

3. 抽象类是一种模板式设计,而接口是一种行为规范,是一种辐射式设计。

二. 具体实现

(抽象类和普通类的区别
1.抽象类必须用public、procted 修饰(如果为private修饰,那么子类则无法继承,也就无法实现其抽象方法)。默认缺省为 public
2. 抽象类无法创建对象。
3. 如果一个子类继承抽象类,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么必须定义为 abstract。)

相同点
1. 接口和抽象类都不能实例化,但是都可以定义引用变量,用来接收实现类或子类对象。
2. 接口的实现类或抽象类的子类都只有实现了接口或抽象类中的所有方法后才能实例化。否则实现类会报错,子类仍然是抽象类。

不同点
1. 接口是公开的,不能有私有的方法或变量,通过关键字interface声明。接口中的所有方法默认都是抽象的,不能有方法体。
抽象类是可以有私有方法或私有变量,通过加abstract声明抽象类或方法。抽象类中被声明为抽象的方法不能包含方法体,其他可以有。
接口中的方法不能是 static,抽象类中允许有static 的方法。
public interface 接口名 {
[public static final] 变量类型 变量名 =变量值;//实现类不能重新定义,也不能改变其值。
[public abstract] 返回类型 方法名();//1. 默认不能有具体的实现。2.只能是public,否则编译器报错。
}

public abstract class 类名{
[default] 变量类型 变量名;

}

2. 接口实现用implements,抽象类继承用extends。一个类可以实现多个接口,但只能继承一个抽象类。