既然,抽象类和接口有着类似的作用,平时用接口的情况又比较多,那么继承的意义何在呢?
其实,OO(Object-Oriented)面向对象编程语言最开始只有继承,没有接口,所以只能以继承来实现抽象,但是,but~抽象的本意在于抽象而非代码重用(虽然继承却是也有这个作用)。抽象类是不能被实例化的,它仅仅提供一个模板而已,这也能说明问题。我们来看看,人们从Worker类、Teacher类中提取共性,向上抽取出一个Person类,这个类是抽象的,它不能被实例化,仅仅是一个模板,要是我们再有一个类Doctor类,他继承自Person类,我们就知道Doctor具有Person类的属性与方法,Worker类和Teacher类直观上也能看出他们具有Person类的特征。JAVA摒弃多继承是因为,假如实现了多继承的话,就体现不出这种思想了。我继承了Person类,又继承了Animal类,那么我到底还是不是人啊!!!
其实,实现接口之前我们的动机是为了多态,继承之前我们的动机是代码复用。 |