2018-05-29 孙小北

抽象类和接口

养浩然之气,做博学之人

一、抽象类和接口的定义

从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。即接口只能定义一系列方法,而不能包含方法的实现和变量,不能拥有自己的属性,但是抽象类能够拥有变量。

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。

//策略接口
public interface IStrategy 
{    
   public void strategyInterface();
}

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

//抽象策略类 
public abstract class Strategy { 
    public abstract void doSum(); //算法方法  
}


二、接口和抽象类异同点

接口和抽象类相同点:

1 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于其他类实现和继承

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

接口和抽象类不同点:


1 接口只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类可以有非抽象的方法

2 接口只能定义静态常量,不能定义普通成员变量抽象类里则既可以定义普通成员变量,也可以定义静态常量

3 接口不能包含构造器抽象类可以包含构造器,抽象类的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作

4 接口不能包含初始化块,但抽象类里完全可以包含初始化块

5 一个类最多只能有一个直接父类(C++中可以多个),包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java、C#单继承不足。

6 一个类实现接口的话要实现接口的所有方法,而抽象类不一定

三、什么时候使用抽象类和接口

如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。

如果基本功能在不断改变,使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。




编辑:孙小北

本文地址: http://www.xiaowangyun.com/wyblog/detail/?id=184

版权归属: www.xiaowangyun.com   转载时请以链接形式注明出处

物以类聚

最新评论

2017-10-06

一辈子不长,只有珍惜了,才不至于后悔。

2017-10-06

懂得感恩,才能走得更远。

标签云

归档

取消

感谢您的支持,您的每一次打赏都是一次鼓励!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦