1相同点:
1都不能被实例化
2抽象类中的抽象方法和接口中的方法 都不能包含实现 但是都必须被子类实现
2不同点:
1)抽象类中的抽象成员必须是public修饰 接口中不需要 默认就是public
2)抽象类中可以有一些非抽象的方法,并且可以有实现部分,但是接口中的所有方法都不能有实现部分
3)一个类只能继承一个抽象类,但是可以继承多个接口
4)抽象类中可以包含字段,而接口不能
5)抽象类的子类可以不必全部实现基类的抽象方法,但是此时必须子类必须也是抽象类,就是用abstract来修饰类
6)实现了接口的类中 必须包含接口的所有属性和方法, 继承了抽象类的子类中,可以不必实现所有抽象方法,只不过这个子类也必须标记为抽象类
3下面谈谈什么时候用接口什么时候用抽象类
我很认同一位老哥说的以用为本。
首先定义一个基类Animal动物
子类Sparrow麻雀 Pig猪
1 )他们都有吃东西的行为,但是他们吃的都是食物food,并且吃完后体重都会增加,这是他们共同都有的行为 我将这个行为定义为抽象类的普通方法(复用代码,减少冗余代码)
2 )麻雀有飞的行为,而猪没有,(特有的行为 我定义为接口,按需自行实现,麻雀实现fly接口,而猪不会飞无需实现)
3 )他们都会走路,但是走路的实现方式不一样(我用抽象基类定义统一的方法声明,然后你们自行实现自己的走路方法,怎么走在子类中来控制)
个人观点,欢迎指正