20180406 java java面向对象-接口和抽象类的区别
Interface Graph
{
//求面积
Double getArea();
}
//圆
class Circle implements Graph
{
private Integer r;//半径
Circle (Integer r)
{
this.r = r;
}
//求面积
public Double getArea()
{
return 3.14 * r * r;
}
}
从java8开始,接口中可以定义默认方法,有方法体。
java8的这个改进 颠覆了java之前的很多设计。模板方法设计模式就不再存在了。
java8中还可以定义静态方法。
上面都是一些开胃小菜,本文重点介绍接口和抽象类的区别:
一、相同点:
1)都位于继承的顶端,用于被其他实现或继承。
2)都不能实例化。
3)都可以定义抽象方法,其子类或实现类都必须复写这些抽象方法。
二、区别:
1)接口中没有构造方法,抽象类有构造方法。
2)抽象类可以包含普通方法和抽象方法,接口只能包含抽象方法(这条只针对java8之前说的)。
3)一个类只能继承一个父类(可能是抽象类),即体现单继承关系,而接口是多继承的并且支持一个类实现多个接口(这样就弥补了java的单继承特性)。
4)成员变量:在接口里默认是public static final修饰的,而抽象类的默认的是包访问权限。
5)方法 :在接口里默认是public abstract修饰的,而抽象类的默认的是包访问权限。
6)内部类 :在接口里默认是public static修饰的,而抽象类的默认的是包访问权限。
如果接口和抽象类可以完成相同的功能,那么我们该如何选择呢?
答:尽量使用接口,要体现面向接口的编程思想。