社区
C#
帖子详情
用接口和抽象类,与不用究竟究竟有什么区别或好处????晕。。。
wdmzjjjjjj
2005-09-02 11:25:54
学习
...全文
1038
47
打赏
收藏
用接口和抽象类,与不用究竟究竟有什么区别或好处????晕。。。
学习
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
47 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zpingy
2005-12-30
打赏
举报
回复
我看大家都不要浮躁,问的人和答的人都一样,很多人的确是答非所问,或则回答没有耐心,回答不好就想好了再回答,不要骂人,学习讨论而已。
xujiaoxiang
2005-12-30
打赏
举报
回复
做一个图形绘制软件。包含Rectangle、Line、Ellipse等图形,实现Draw方法。有一个集合array容纳所有图形对象,绘制集合中的图形。
1、 在不定义接口和抽象类时
class Rectangle
{
void Draw()
{
//。。。。。。
}
}
class Line
{
void Draw()
{
//。。。。。。
}
}
class Ellipse
{
void Draw()
{
//。。。。。。
}
}
绘制时
for(int i=0;i<array.Count;i++)
{
if(array[i] is Rectangle)
{
(array[i] as Rectangle).Draw();
}
else if(array[i] is Line)
{
(array[i] as Line).Draw();
}
else if(array[i] is Ellipse)
{
(array[i] as Ellipse).Draw();
}
}
2、 定义接口和抽象类时
abstract class Shape
{
void Draw();
}
class Rectangle :Shape
{
void Draw()
{
//。。。。。。
}
}
class Line :Shape
{
void Draw()
{
//。。。。。。
}
}
class Ellipse :Shape
{
void Draw()
{
//。。。。。。
}
}
使用时:
for(int i=0;i<array.Count;i++)
{
(array[i] as Shape).Draw();
}
已经可以看到差别了。如果你要支持更多的图形和更多的功能,差别就明显了。
可能你会想不用抽象类也可以实现。可是你怎么实现Shape这个类的Draw方法。Shape本身就是个抽象的概念。你不会希望谁创建了一个Shape实例吧。
类似的如“动物”是个抽象类。有类别(哺乳类,两栖类等)等属性,有吼叫等方法。这些都需要一个抽象类来定义。
如果没有抽象类,你打算怎么来实现?
书上也有很多这样的例子。讲解的也很详细。(以上的例子也源于一本书,忘记书名了~)。
抽象和接口不仅限于此。需要在实践中不断总结。
xianbin
2005-12-08
打赏
举报
回复
hzw66(超越理想) 的回答已经不错了,楼主只要记下来,以后有点体会了再来看hzw66(超越理想)的话你就会知道那些话的意思了.
另外,浮躁的心态是很难学到好东西的.
bbdog
2005-12-07
打赏
举报
回复
泡泡兄关于数据库的那个举例真的太形像了,我得好好体会一下.
谢谢了.
hainang1234
2005-11-16
打赏
举报
回复
看看这个命名空间的接口用法吧:System.Collections。
抽象类就比较明显了,可以写实现嘛。而某些方法只应该有定义必须让派生类去实现,所以又只能写成抽象函数,于是就用抽象类。
cjnet
2005-11-16
打赏
举报
回复
我到是学了很多哦,呵呵
ybbigepl
2005-11-16
打赏
举报
回复
白ci,别人回答并帮助你,你怎么能这样说,比如你需要一个类不允许它实例化,你就可以声明为abstract ,然后通过对这个抽象类的继承使用,这样可以将一些多个类要要求用的属性或方法都放到该抽象类中,接口主要是解决多从继承的问题,增加了代码的灵活性。
xiao_p
2005-11-16
打赏
举报
回复
合理的运用接口,这就是软件开发的一个准则,大师就是这么说的
呵呵
你就当公理用吧
至于怎么证明
就要靠你的将来的经验的增加和知识的积累了………………
xiao_p
2005-11-16
打赏
举报
回复
当年看设计模式的时候 就看见大师说好的软件是面向借口的,不是面向实现的
但是就是不明白,后来思考的久了才知道
这不是几句话就能说明白的问题,而是关于整个oo的思考,简单的说就是为了增加复用性,减少维护的难度,增加灵活性
feihu_02
2005-11-16
打赏
举报
回复
studying
nibaijing
2005-09-03
打赏
举报
回复
我能理解搂主的心情,因为刚刚步入面向对象编程的同志都有过这种心情,我也是。我们学习新的知识的途径有很多,能通过有丰富编程和项目经验的人手把手的教那是最好的捷径,然而,冰冻三尺非一日之寒,我们需要的是通过前辈的指点,再加上自己的钻研,这才是最实在的途径。以上同志对楼主的回答,并非答非所问,只是说的简洁,自己多钻研,别无他法。
wdmzjjjjjj
2005-09-03
打赏
举报
回复
up
wdmzjjjjjj
2005-09-03
打赏
举报
回复
UP
自然框架
2005-09-03
打赏
举报
回复
你是来请教的吧!
难道你是来考我们的????
怎么会出来个“答非所问”呢?
yynice
2005-09-03
打赏
举报
回复
学习中。。。谢谢pupo(泡泡) 、LinFengCyl(林风) ,又学到了很多
不过楼主似乎还是不满意,呵呵
zhiri84
2005-09-03
打赏
举报
回复
关注
linfengcyl
2005-09-02
打赏
举报
回复
上面的兄弟说得不错了,你还这种态度?火气这么大干嘛?你干脆直接问为什么要OO比较好。用它们好处多了,主要是减少耦合以便于构建复杂的系统,具体的就自己看看书,多思考,多实践。这样大的题目不是这样问别人回答一两句你就能真正弄明白的。
wdmzjjjjjj
2005-09-02
打赏
举报
回复
真的没人能真正说明白?????????
wdmzjjjjjj
2005-09-02
打赏
举报
回复
答非所问,我问的是为什么要用接口或抽象类,不用他们一样能实现功能
hzw66
2005-09-02
打赏
举报
回复
接口和抽象类关系很紧密,它们都具有对成员的抽象。
对于一个抽象类,至少一个方法是抽象方法既可,这意味着它也可以具有具体方法[译注:Concrete Method,这只是相对于抽象方法而言,面向对象中并没有这个概念]。
对于一个接口,所有的方法必须都是抽象的。
实现了一个接口的类必须为接口中的所有方法提供具体的实现,否则只能声明为抽象类。
在C#中,多重继承(Multiple Inheritance)只能通过实现多个接口得到。抽象类只能单继承[注:C#中的单继承是指所有类作为基类的时候都只能是派生类声明中唯一的基类,而不仅仅是抽象类]。
接口定义的是一个契约,其中只能包含四种实体,即方法、属性、事件和索引器。因此接口不能包含常数(Constant)、域、操作符、构造器、析构器、静态构造器或类型[译注:指嵌套的类型]。
同时,一个接口还不能包含任何类型的静态成员。修饰符abstract、public、protected、internal、private、virtual、override都是不允许出现的,因为它们在这种环境中是没有意义的。
类中实现的接口成员必须具有公有的可访问性。
加载更多回复(26)
抽象类
和
接口
的
区别
相关信息
在学习三层的时候,我们总是有些同学会反
晕
,现在我把我所掌握的有关信息和大家一起分享,谢谢大家支持
编程新手真言......
8.2 编程能力,代码控制能力,复用与
接口
,轮子发明与使用 170 8.3 OO,模板,设计模式与设计 171 8.4 设计能力和程序员能力模型 172 8.4 自上而下设计和自下而上设计 173 8.5 大中型软件和复用与逻辑达成 177 8.6 ...
Java中的
抽象类
和
接口
各位铁汁们大家好呀!今天让我们继续学习java,看看java中的
抽象类
和
接口
到底是什么? 里面也会讲到多态呀,一起来看看吧
接口
和
抽象类
的异同及适用场景
接口
和
抽象类
的异同及适用场景 PHP 不同点 语法上的不同,对
接口
的使用是通过关键字implements,定义是使用关键字interface;对
抽象类
的使用是通过关键字extends(当然
接口
也可以通过关键字extends继承),定义...
PHP中
抽象类
与
接口
的应用场景
<?.../*** ====笔记部分==== ...1: 如上,
接口
本身即是抽象的,内部声明的方法 默认也是抽象的.
不用
加 abstract 2: 一个类可以一次性实现多个
接口
. 语法用 implements 实现 (把我这几个功能实现了) class Cl
C#
110,545
社区成员
642,580
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章