以下是自我的见解。 
1.抽象类是对类的抽象 
  如果N个具体类拥有同样的属性或行为(也就是方法)那么应该建立一个父类, 
  将这N个子类相同的部分全部提取出来,这个提取的过程就称之为“抽象”。 
  如果父类实例化没有任何意义那么就应该让父类为abstract抽象类。 
  这里要注意的是,如果一个子类不能完全替换掉父类的所有方法,那么继承关系就是不应该的。 
  例如父类有10个方法,子类只有9个方法能够重写。那么这个子类就不应该继承父类。 
  请你参考“里氏代换原则”。 2.类是对对象的抽象 
  类是对对象的一种概念性定义,简而言之:类定义一个概念,而对象则是一个实体。实例化对象之后,对象就可以使用类(概念)里面定义的方法和属性。 3.接口是对行为的抽象 
  接口是一种对于行为的抽象,也就是说呢,接口只是对某个方法进行定义,然后可以由子类来实现这些方法。 总结:什么时候使用接口和抽象类。 
当子类应当拥有父类的所有属性和方法并且能够完全重写父类的方法时,则使用抽象类较为合适。 
当子类(或某几个类)需要共用一个方法,但是这几个类完全不相关,甚至概念都不一样时,则使用接口较为合适,在接口里定义方法列表即可。