这只是我在看设计模式的时候的一点想法。
由于Java中只有单继承而没有多继承,那如果有多继承的话,是否抽象类和接口都没用了,而是要像C++一样设计?我也不觉得Interface的存在也仅仅是为了解决类的多继承问题。
对于抽象类的接口的选择上,可以从Java的类库容器设计上来看看:Collection,Map和Iterator都使用了接口。而Collection和Map都有相应的抽象类,抽象类中更多强调的是一种通用的数据格式。
而在运行时,抽象类可以以普通类的形式获得内存分配,而接口存在于代码区,不会获得内存分配并且只是作为引用类型而存在。
所以,我认为抽象类偏向于对数据结构的封装(包括对抽象类中数据的操作),而接口则是对行为的一个规范(具备怎样的一些功能集合才能概括一个事物)。
以上只是个人见解,希望不对的地方能得以纠正。
由于Java中只有单继承而没有多继承,那如果有多继承的话,是否抽象类和接口都没用了,而是要像C++一样设计?我也不觉得Interface的存在也仅仅是为了解决类的多继承问题。
对于抽象类的接口的选择上,可以从Java的类库容器设计上来看看:Collection,Map和Iterator都使用了接口。而Collection和Map都有相应的抽象类,抽象类中更多强调的是一种通用的数据格式。
而在运行时,抽象类可以以普通类的形式获得内存分配,而接口存在于代码区,不会获得内存分配并且只是作为引用类型而存在。
所以,我认为抽象类偏向于对数据结构的封装(包括对抽象类中数据的操作),而接口则是对行为的一个规范(具备怎样的一些功能集合才能概括一个事物)。
以上只是个人见解,希望不对的地方能得以纠正。