[讨论]Abstract Class 和 Interface有啥区别和联系?
讨论性质,本人给分,多多发言 :) 问题点数:100、回复次数:15Top
1 楼duanfeng(段玉)回复于 2002-05-23 09:42:36 得分 80
请认真理解:
Abstract Class是 "is-a"关系
interface表示的是"like-a"关系Top
2 楼wenzm(魔术师)回复于 2002-05-23 09:47:41 得分 20
我也想知道
因为他们都是不允许实例化的
但Interface中不允许实现而只能声明一个方法、属性等
而在Abstract Class中切可以具体的实现
还有
一个Abstract Class 中定义一个方法或属性时,方法或属性定义或不定义为Abstract又有什么区别呢!?Top
3 楼alpine(笨笨)回复于 2002-05-23 09:48:10 得分 0
太深奥了,说通俗点儿吧Top
4 楼alpine(笨笨)回复于 2002-05-23 09:48:44 得分 0
太深奥了,说通俗点儿吧Top
5 楼wenzm(魔术师)回复于 2002-05-23 09:50:40 得分 0
duanfeng(段玉)说的也对,本来,Interface主要是面向设计的,更多的注重的时对象的结构,而Class好象更多的是注重实现(功能)
但如果是Abstract Class 的话,我觉得除了它不能和Interface一样多重继承一样,好象它们又很相似了!疑惑Top
6 楼duanfeng(段玉)回复于 2002-05-23 09:54:58 得分 0
abstract class表示一种继承关系,
而继承关系在本质上是"is-a"关系。
Interface定义的是行为,
所以概念描述可以通过interface方式定义。
还要注意它们表现的概念不同.Top
7 楼duanfeng(段玉)回复于 2002-05-23 09:57:09 得分 0
to alpine(笨笨) ,明白了没有,
多思考一下.^-^
Top
8 楼alpine(笨笨)回复于 2002-05-23 10:02:08 得分 0
是否是在所有的情况下,都只有唯一的选择?即无论如何abstract class和interface都不能相互替代?
如果是这样的,那么我们是否可以穷举所有可能情况,然后寻找它们的答案呢Top
9 楼duanfeng(段玉)回复于 2002-05-23 10:06:55 得分 0
to alpine(笨笨),
我讲了这么多都没有明白?
哪还是请多思考一下.Top
10 楼wenzm(魔术师)回复于 2002-05-23 10:19:19 得分 0
只要有一个方式或属性是abstract的话,这个Class就必须定义为abstract
abstract Class允许定义和实现非abstract的方法,而abstract方法则必须在其子类中全部override实现! abstract Class也可以定义成员变量,起到保护变量的作用。而且abstract Class子类的实例中也是可以可以访问其父类(即abstract Class)中的Public方法或属性的
而interface 中只能定义方法属性吧,而且不允许加级别修饰符(应该是所有的都默认为public 吧)
临散的知道一些,也理不清楚,也说不到本质
Top
11 楼xd_yang(Robert)回复于 2002-05-23 10:20:01 得分 0
我觉得 duanfeng(段玉) 已经说得很明白了Top
12 楼alpine(笨笨)回复于 2002-05-23 10:20:10 得分 0
首先感谢duanfeng(段玉)的精辟结论
但是像我一样笨笨的人恐怕还有很多,如果再能给出几个简单的例子就更好了 :)
多谢多谢Top
13 楼wenzm(魔术师)回复于 2002-05-23 10:24:04 得分 0
Class是 "is-a"关系
interface表示的是"like-a"关系
所以interface好象跟多的是描述对间的关系,
而Class因为是“is_a"所以更多的是来表达/描述对象是什么? 所以除了
和interface一样定义外,还可以实现它自己的特性!
Top
14 楼duanfeng(段玉)回复于 2002-05-23 10:33:08 得分 0
如一个新型汽车,有人工智能功能:
可以这样描述:
abstract class Car
{
public abstract void drive()
...
}
interface AI{
public void uses_AI()
}
则
NewCar : Car interface AI
{
public void uses_AI()
public override void drive()
}
Top
15 楼alpine(笨笨)回复于 2002-05-23 10:41:26 得分 0
多谢多谢,酱子就生动多了 :)
我再理解理解
是否同意,这两者是不可以相互替代的呢?
而他们的区别更多的是语意上面的呢?Top
16 楼duanfeng(段玉)回复于 2002-05-23 10:43:22 得分 0
to alpine(笨笨) ,
我感觉你还是应好好思考一下再来问,
可能更加成熟一些.Top
17 楼alpine(笨笨)回复于 2002-05-23 17:12:58 得分 0
多谢多谢,下午看了一下inside c#和programming C#
得到了一些东西。
今天没时间了,改天专门写一篇文章吧
其实class和interface的区别是OO的概念问题了Top
相关问题
- abstract class和interface有何区别啊?
- abstract class和interface的区别在哪里?
- abstract class和interface有什么区别?
- 请问class,abstract class,interface的区别和联系.
- 关于abstract interface接口,跟interface有什么区别?
- Class 与 JavaBean的区别
- 请教interface与abstract class公用的问题
- java bean和java class的区别??
- template <typename a> 与template <class t>有什么区别?
- #include "Myclass.h" 与 class CMyclass 有什么区别?




