社区
Java
帖子详情
抽象类有什么好处???
Ukyome
2004-04-21 03:01:02
为什么要用到抽象类和接口呢?
都说是为了符合开闭原则,但是根本就感觉无从下手去定义一个抽象类或是接口。
觉得有些多此一举了。
唉水平太低就是这样了。
有经验的人可以说说吗。
...全文
19378
51
打赏
收藏
抽象类有什么好处???
为什么要用到抽象类和接口呢? 都说是为了符合开闭原则,但是根本就感觉无从下手去定义一个抽象类或是接口。 觉得有些多此一举了。 唉水平太低就是这样了。 有经验的人可以说说吗。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
51 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
schee
2004-07-16
打赏
举报
回复
扩展性强!
yaray
2004-07-15
打赏
举报
回复
接口: 只定义方法名称,没有方法的具体实现。
抽象类: 只定义方法名称,没有方法的具体实现。 (与 接口 相同)
定义方法名称,并实现这些方法。 (与 类 相同)
以上两者都有。(真正的抽象类大多是这种方式. 可参看API源代码)
类:定义的方法必须都有实现。
jie015
2004-07-15
打赏
举报
回复
听课。
不过我在书上看到,说Interface比抽象类更抽象。
优先考虑接口编程。
孬毛毛
2004-07-15
打赏
举报
回复
觉得接口主要体现多态、可扩展性。
而抽象类主要是体现方法复用的。
~~~不知道这个理解是否正确??!!
lubin59
2004-07-14
打赏
举报
回复
好久不永java,都快忘光了,赶快学习一下
孬毛毛
2004-07-14
打赏
举报
回复
回复人: 0flying0(j2ee的狂热分子) ( ) 信誉:100 2004-4-26 19:07:37 得分: 0
其实“接口”才更有利于多态的实现的。
------------------------------------------
同意这一点~~~~~~复用、多态等特性,最根本是在接口上面体现出来的
programer23
2004-07-14
打赏
举报
回复
面向抽象!
huyuefox
2004-06-18
打赏
举报
回复
抽象类作为超类,可以将子类的公用逻辑用方法实现,而接口只是定义了实现类的规范(其实就是定义了实现类该做什么)
因此子类有公用的逻辑部分就在抽象类里实现该方法的细节,子类中有共性但实现细节不同则定义为抽象方法。抽象类只能被一个子类继承,而接口可以被多个实现类实现,所以同意楼上的接口的多态性更好
armorking2003
2004-06-17
打赏
举报
回复
interface表述“has a”关系,用于描述功能
是用来说明它的是实现类是“做什么?”的
至于“怎么作?”,interface并不进行约束
而abstract class表述“is a”关系,它在描述功能的同时
也通过具体实现部分功能的方式,来约束“怎么作?”
只有接受了这个约束,才应该去继承它
从而可以将“其中被具体实现的部分功能”,在它的子类中得到重用
实际使用当中,interface与而abstract class各有优势,
需要权衡。
不过,有时候,两者也可以兼用
《effective java》中提出,
可以声明一个interface描述功能,
再提供一个该接口的骨架(skeleton)实现(实现该接口的abstract class)
固化对功能实现方式的约束,从而尽可能地实现重用
于是就有了另一个问题:
在使用当中,可能发现这个skeleton实现不能满足现有需求
这时可以在原有的interface基础上,派生出另一个skeleton实现
shingle
2004-06-13
打赏
举报
回复
从设计上说抽象类的好处有二:
一、抽象类提供了部分实现,使子类可以重用部分抽象类的代码
二、抽象类为其子类提供了共同的接口(注意:这里说我接口与 java 中的 interface 是不同的)
也就是别人可以将各个子类的对象当成抽象类的对象使用。
我觉得“为了方便扩展”的说法是荒谬的,如果可以实现,为什么要代码写到别的类中去呢?
抽象类的关键是抽象方法,而设计抽象方法的原因是在于抽象类自己没有办法实现这个方法,
或者说在抽象类这一层,我们不知道如何实现这个方法,只有到了具体类才有办法知道实现。
如“动物”这个抽象类,有一个抽象方法“吃”,但是动物这个类是不能实现“吃这个方法的,
只有到了“人”这个类,才能有“用手将东西放进嘴里然后吞下去”这样的实现。
“动物”这个类的“吃”方法也不可能有默认的实现,因为现实中没有一个纯“动物”的实例,
它要么是“人”类的实例,要么是其它“动物”类子类的实例!
但我们一旦碰到一个“动物”对象,就可以调用“吃”这个方法,
当然我们也要预期不同对象的实现不是一样的
同桌老王
2004-06-11
打赏
举报
回复
是为了自己或者别人以后扩展方便。
glchengang
2004-06-11
打赏
举报
回复
简单的说,抽象类就是为了共用代码,没必要想得这么复杂.
http://dev.csdn.net/user/glchengang 看<一个体现Java接口及工厂模式优点的例子>
如果看了这篇文章你还是不能理解接口和抽象类的作用,告诉我,我再写.
raymond323
2004-06-09
打赏
举报
回复
1
rootI
2004-06-09
打赏
举报
回复
Refactoring
raimundo
2004-05-12
打赏
举报
回复
赫赫,其实如果对比C++的话就很明白了,C++由于没有接口的语法,所以继承的设计哲学里面分接口继承和实现继承两种,而java中通过语言名确了使用interface进行接口继承,那么抽象类在设计上的唯一用处就是实现继承。我比较赞同这样的设计,一般的类都final,能继承的都是abstract,决不为了减少代码作一个既可以继承也可以具体使用的类。
frean
2004-05-10
打赏
举报
回复
对于接口、抽象类,我的理解是:从类图出发,根据实际情况定义接口或抽象类,接口是定义行为的,任何一个类都可以看作有一个接口,如果需要可以定义接口,否则不需要定义,而抽象类是可以定义和实现行为,但不能执行行为,因为它不能实例化,但可以定义对象,这个对象的行为是抽象类的实现类的实例的行为。
yuannauy
2004-05-10
打赏
举报
回复
那又什么时候使用“回调”呢?
MaiCle
2004-05-07
打赏
举报
回复
gleaf() :具体类不是用来继承的!
Scott Meyers曾指出:只要有可能,不要从具体类继承
java_alias
2004-05-05
打赏
举报
回复
匆忙上网,收藏先,有空慢慢看
gleaf
2004-05-05
打赏
举报
回复
回复人: ai92(抵制日货!!) ( ) 信誉:96 2004-04-23 01:35:00 得分:0
再来一个:
假如很多人要买水果吃,吃的动作只有一个,但是有的人要用现金买,有的人用信用卡,有的人赊帐。要为每个人定义一个类,就要定义多个相同的吃的方法。如果定义一个抽象类,在里面实现吃的方法,再做一个买的抽象方法。那每个人的类都从这个抽象类派生下来,只要实现买的方法即可,吃的方法就可以直接用父类的方法了。如果要改吃的方法就不用改多个,只要改这个抽象类里的就行了。
=============================================================
不同意,在这里也可以用普通类作为父类,在这个例子不一定要用抽象类,也可以用普通类。
=============================================================
在这个例子里可以使用普通类,此时“吃”方法需要被声明为抽象方法。
在这个类里面可能同时存在抽象方法和普通(现实)方法。有点不爽
就一般而言,仍然可以把这里的抽象方法从普通类里面分离出来,形成一个接口。而普通类实现接口。如此就把现实世界中的“抽象”和“具体”完全分离,有益于代码的可读性和可重用性。
加载更多回复(31)
JAVA 为什么要使用
抽象类
JAVA 为什么要使用
抽象类
使用
抽象类
有什么
好处
C++的概念/解释,可打印,华南师范大学C++考过。
自己整理的C++要背的一些概念,华南师范大学考c++的建议看看,21届考研有考到哦!!(可打印版) 1. 面向对象的三个基本特征 4 2. 抽象 4 3. 如何实现多态性 4 4. const与define的区别 4 5. static作用 4 6. 静态数据成员与静态成员函数 5 7. 静态数据成员与全局变量的不同 5 8. 为什么引入友元的概念? 5 9. 什么是友元函数? 5 10. 友元成员函数 5 11. 友元类 5 12. 函数重载 5 13. 运算符重载 6 14. 运算符重载函数的使用 6 15. 重载运算符的规则 6 16. 为什么要使用继承 6 17. 保护成员的作用 6 18. 多重继承 6 19. 虚基类及其作用 6 20. 派生类的构造函数和析构函数的构造规则 7 21. 虚函数及其作用 7 22. 静态关联和动态关联 7 23. 函数重载与虚函数的不同 7 24. 虚析构函数 8 25. 纯虚函数 8 26.
抽象类
8 27.
抽象类
与接口的区别 8 28. 32.输入输出流 8 29. 标准的输出流对象有哪些 8 30. 标准的输入流对象有哪些 9 31. 文件流类与文件流对象 9 32. 两个短整型数相加后,结果是什么类型? 9 33. 什么是值传递? 9 34. 值传递、引用传递和指针传递的区别是什么? 9 35. 什么是函数模板?什么是模板函数?函数模板有什么用途? 9 36. C++是如何实现函数重载的? 10 37. 全局变量和局部变量的主要区别是什么? 使用全局变量有什么
好处
?有什么坏处? 10 38. 变量定义和变量声明有什么区别? 10 39. 引入结构体有什么
好处
? 10 40. 单链表中为什么要引入头结点? 10 41. 结构体类型定义的作用是什么? 结构体类型的变量定义的作用是什么? 10 42. 用自己的话描述逐步细化的过程 10 43. 为什么库的实现文件要包含自己的头文件? 11 44. 什么头文件要包含 #ifndef...#endif这对编译预处理指令? 11 45. 为什么要使用库? 11 46. 用struct定义类型与用class定义类型有什么区别? 11 47. 构造函数和析构函数的作用是什么?它们各有什么特征? 11 48. 友元的作用是什么? 11 49. 静态数据成员有什么特征?有什么用途? 11 50. 在定义一个类时,哪些部分应放在头文件(.h文件)中,哪些部分应放在实现文件(.cpp文件)中? 12 51. 什么情况下类必须定义自己的复制构造函数? 12 52. 常量数据成员和静态常量数据成员有什么区别?如何初始化常量数据成员?如何初始化静态常量数据成员? 12 53. 什么是this指针?为什么要有this指针? 12 54. 复制构造函数的参数为什么一定要用引用传递,而不能用值传递? 12 55. 构造函数为什么要有初始化列表? 12 56. 如何区分++和--的前缀用法和后缀用法的重载函数? 12 57. 类有几个默认的成员函数? 13 58. 什么是
抽象类
?定义
抽象类
有什么意义?
抽象类
在使用上有什么限制? 13 59. 为什么要定义虚析构函数? 13 60. 试说明派生类对象的构造和析构次序。 13 61. 试说明虚函数和纯虚函数有什么区别 13 62. 基类指针可以指向派生类的对象, 为什么派生类的指针不能指向基类对象? 13 63. 如果一个派生类新增加的数据成员中有一个对象成员,试描述派生类的构造过程 13 64. 为什么函数模板的使用与普通的函数完全一样, 而类模板在使用时还必须被实例化? 13 65. 类模板继承时的语法与普通的类继承有什么不同? 13 66. 什么是打开文件?什么是关闭文件?为什么需要打开和关闭文件? 14 67. 为什么要检查文件打开是否成功?如何检查? 14 68. ASCII文件和二进制文件有什么不同? 14 69. C++有哪4个预定义的流? 14 70. 什么时候用输入方式打开文件?什么时候应该用输出方式打开文件?什么时候该用app方式打开文件? 14 71. 哪些流操纵符只对下一次输入/输出有效?哪些流操纵符是一直有效直到被改变? 14 72. 什么叫做作用域?什么叫做局部变量? 什么叫做全局变量? 14
JavaSE每日总结4.23
1.请问子类继承父类用什么关键字? 继承使用 extends 关键字 2.请问子类继承父类的
好处
是什么? 提升了代码的复用性 提升了代码的可维护性 让类与类之间产生继承关系(多态的前提) 3.请问父类的哪些成员不能被继承,或者不能被访问? 父类的构造方法不能被子类继承 父类的私有成员变量和私有成员方法可以被继承,只是无法直接访问,可以通过父类中 public 的方法间接访问 4.请问子类是否可以同时继承多个父类? 不可以同时继承多个父类,Java 只支持单继承,但可以多层继承。 5.问定义
抽象类
、抽象方法使用的关键字是什么? 定义
抽象类
和抽象方法的关键字是 abstract 6.请问定义
抽象类
什么是
抽象类
?什么是接口?以及
抽象类
与接口区别?
1,
抽象类
(abstract):是一个含有抽象修饰符的类,
抽象类
不能被实例化,
抽象类
可以没有抽象方法,但抽象方法必须写在
抽象类
中,且抽象方法不能有方法体。 2,接口(interface):是一个含有接口的类或方法,与
抽象类
一样都不能实例化,接口成员都是默认的public且只能包含抽象方法及常量。 接口的用法 抽象方法的用法 ...
为什么使用
抽象类
?有什么
好处
?
最简单的说法也是最重要的理由:接口和实现分离 老是在想为什么要引用
抽象类
,一般类不就够用了吗。一般类里定义的方法,子类也可以覆盖,没必要定义成抽象的啊。 看了下面的文章,明白了一点。 其实不是说
抽象类
有什么用,一般类确实也能满足应用,但是现实中确实有些父类中的方法确实没有必要写,因为各个子类中的这个方法肯定会有不同,所以没有必要再父类里写。当然你也可以把
抽象类
都写成非
抽象类
,但是这样没有必要。 而...
Java
50,523
社区成员
85,601
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章