回顾:接口与抽象类的区别?
接口中的方法不能有private的,其他的都可以,而抽象类中的public,private protected,default都可以。 接口中不能有构造方法,但是抽象类中,可以有构造方法。 接口是可以多继承,但是抽象类只能单继承。 接口和抽象类都可以有静态方法,常量。
在JDK1.8以后,接口和抽象类的区别并不大了。
我们为什么需要抽象类?
我们应该都知道,继承能解决代码复用的问题。所以,抽象类也是为代码复用而生的。但是,我们不用抽象类就不能用继承了吗?这样看来,不用抽象类也可以呀。
public class Animal {
public Animal(){
}
public abstract void eat();
}
那我们为什么要将 eat()方法定义为抽象的呢?
不定义为抽象可能会导致,子类忘记重写父类中的方法,只能靠人工检查是否重写了,如果用语法约束,就可以使编译器帮助我们完成这部分检查。并且我们知道,抽象方法必须定义在抽象类中,所以,我们需要抽象类这个语法。
如果在父类中定义一个空方法,感觉也有点怪怪的,我们会思考这里为什么会有一个空方法,以及这个空方法的作用,远没有抽象方法简单明了。
为什么需要接口呢?
评论区咱们一起讨论下。
什么时候用接口?什么时候用抽象类?
如果我们要表示一种is-a的关系,且是为了解决代码复用的问题,我们就用抽象类。 如果我们要表示一种has-a关系,且是为了解决抽象而非代码复用的问题,那我们就可以使用接口。
抽象类是一种自下而上的设计思路,先有子类代码重复,然后将重复代码放到父类中。而在接口是自上而下的思路,都是先设计接口,在考虑实现。
文章转载自让天下没有难学的编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




