多态:容许将子类类型的指针赋值给父类类型的指针。也就是同一操做做用于不一样的对象,能够有不一样的解释,产生不一样的执行结果。在运行时,能够经过指向基类的指针,来调用实现派生类中的方法。工具
象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。因此,若是你在为某个地方该使用接口仍是抽象类而犹豫不决时,那么能够想一想你的动机是什么。设计
总而言之,接口与抽象类的区别主要在于使用的动机,而不在于其自己。而一个东西该定义成抽象类仍是接口,要根据具体环境的上下文决定。再者,我认为接口和抽象类的另外一个区别在于,抽象类和它的子类之间应该是通常和特殊的关系,而接口仅仅是它的子类应该实现的一组规则。(固然,有时也可能存在通常与特殊的关系,但咱们使用接口的目的不在这里)如,交通工具定义成抽象类,汽车、飞机、轮船定义成子类,是能够接受的,由于汽车、飞机、轮船都是一种特殊的交通工具。再譬如Icomparable接口,它只是说,实现这个接口的类必需要能够进行比较,这是一条规则。若是Car这个类实现了Icomparable,只是说,咱们的Car中有一个方法能够对两个Car的实例进行比较,多是比哪辆车更贵,也可能比哪辆车更大,这都无所谓,但咱们不能说“汽车是一种特殊的能够比较”,这在文法上都不通。指针
里氏替换原则(Liskov Substitution Principle):派生类(子类)对象可以替换其基类(超类)对象被使用。通俗一点的理解就是“子类是父类”,举个例子,“男人是人,人不必定是男人”,当须要一个父类类型的对象的时候能够给一个子类类型的对象;当须要一个子类类型对象的时候给一个父类类型对象是不能够的!对象
开放封闭原则(Open Closed Principle):封装变化、下降耦合,软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。所以,开放封闭原则主要体如今两个方面:对扩展开放,意味着有新的需求或变化时,能够对现有代码进行扩展,以适应新的状况。对修改封闭,意味着类一旦设计完成,就能够独立完成其工做,而不要对类进行任何修改。接口