抽象类
What
抽象类通常代表一个抽象概念,它提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的。
动物是一个抽象类,猫,狗都可以继承动物这个抽象类,现在又有一个哈巴狗想继承狗这个类,就需要把狗这个类变为抽象类。
注意
1.抽象类不能实例化:“动物”实例化没有意义;
2.抽象方法是必须被子类重写的方法;
3.如果类中包含抽象方法,那么类必须定义为抽象类;
4.让抽象类拥有尽可能多的代码,拥有尽可能少的数据;
接口
What
接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。
注意
1.接口不能实例化,不能有构造方法和字段;
2.不能有修饰符,方法没有实体;
3.不能声明虚拟的或静态的;
4.实现接口的类必须实现接口中的所有方法和属性;
5.一个类可以支持多个接口,多个类也可以支持相同的接口;
区别
1.类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象;
接口是对类的局部(行为)进行的抽象,抽象类是对类整体(字段,属性,方法)的抽象
2.如果行为跨越不同类的对象,可使用接口;对于一些相似的类的对象,用继承抽象类;
猫,狗都是动物,让他们去继承动物这个抽象类,而飞机,麻雀,超人是不相干的类,叮当和孙悟空也是不相干的类,但是又有共同点,前三个会飞,后两个会变东西,所以让他们去实现相同的接口
3.抽象类是从子类中发现了公共的东西,泛化出子类,然后子类继承父类,而接口是根本不知子类的存在,方法如何实现还不确认;
先有一个猫类,再有一个狗类,观察发现他们的类似之处,泛化出Animal类,Animal就是抽象类;而接口是,运动会的组办方,策划了很多比赛项目,但是不知到会有哪些动物来参加比赛,他们的实现行为也不得而知。所以抽象类是自底而上抽象出来的,而接口是自顶向下设计出来的