抽象类(abstract)和接口(interface)的对比
1. 抽象类(abstract)
我们一般声明一个抽象类按照如下形式:
abstract class ClassName{
//成员变量
//成员方法
}
一个抽象类中可以有一个或者多个抽象方法,也就是说抽象类中可以有具体方法。其目的是为所有子类定义一个统一的接口。声明抽象方法的格式如下:
abstract 返回值类型 方法名(参数列表);
eg: public abstract void fun();
抽象类需遵循以下几点:
1. 抽象类不能被new出来实例
2.抽象类和抽象方法必须用abstract关键字修饰,抽象类不一定要包含抽象方法。
3.抽象方法只需要声明,没有必要实现
4.抽象类必须被继承,抽象方法必须被重写
5.如果包含抽象方法,则该类必须是抽象的。子类必须重写父类所有的抽象方法,否则该子类还是抽象类
备注:抽象方法是要被子类实现的,所以访问控制符不可能是private,修饰符不可能使用static和native
2. 接口(interface)
接口是Java中实现多重继承的一种方式,是抽象方法和常量的集合。接口是一种特殊的抽象类,它只定义了常量和方法,而不包含变量和具体方法的实现。接口的声明如下:
public interface 接口名称{
//常量
//方法声明
}
接口中的常量都有public static final的属性,虽然这些可以不写。接口中只进行方法的声明,不写方法的实现。接口中的方法都有public abstract的属性,虽然这些关键字可以不写。