zxbyhcsdn

 

关于抽象类和接口的理解:

关于抽象类和接口的理解:
 
抽象类建议这样来理解好一点:抽象者,不确定也
就是原本是一个普通的类,但是由于有了一个抽象方法,所以这个类就必须成为一个抽象类.
为什么啦!
因为定义成抽象类,就不允许直接实例化了. 想想也是显然的,因为有一个方法是抽象方法,都没有实现,
实例化成对象了,然后对象调用这个方法不久瓜了么?
这就好比车子还没有安上方向盘,如果要开的话,就没办法控制方向了.
抽象类使用的场合:
类的部分方法是确定的,而另外部分方法是不确定的,只有通过继承的子类去确定这部分方法,
但是子类可以使用抽象类的确定的方法(重用).

这儿需要注意一点:就是不要去Override 父类的非抽象方法,那写方法是给你重用的,不是给你置换的.
原则:继承应当用来扩展超类的功能,而不是置换或者撤销超类的功能
比如说,你有一个猫,然后你把狗继承自猫,但是猫可以爬树,狗不能.就只有把那个爬树的功能撤销了.想想这是多么荒唐的事情啊!!

那么何为接口啦:
就是说有一个类,所有的方法都是不确定的.
比如说 平面形状,总归有获取设置边长,面积这些方法吧,但是怎么去实现是不确定的.
好像 形状这玩意儿 的确找不到能确定的方法.那么就可以定义成一个接口.
接口允许有 public static final 的属性, 但是不推荐这样用,这是一种错误的用法.
可以认为接口就是一个特殊的 抽象类(所有的方法都是不确定的)
然后接口有一个好处,就是可多继承.
举一个例子,说明抽象类和接口一起用的地方
比如说,门这个类有Opern和Close两个方法,但是有一种特殊的门需要一个报警的功能,
但是报警不是门的特征,是报警器的特征,故可以把报警设置为一个接口
那么报警的门就从门这个抽象类和报警接口继承

posted on 2008-07-23 19:03 zxbyh 阅读(1566) 评论(6)  编辑  收藏 所属分类: OOAD

评论

# re: 关于抽象类和接口的理解: 2008-07-23 22:19 蓝雪沙

恩,写的挺不错,特别是 接口 最后面举的 门 例子 我感觉非常到位。

希望楼主继续总结,Java中像这样的有必要彻底清楚的很多。   回复  更多评论   

# re: 关于抽象类和接口的理解: 2008-07-24 08:41 wxm

我是这样理解的,从目的上来说,抽象类主要是为了代码或算法的重用,而接口是一种约定,从功能上来说,抽象类有实现部分,但是不能多继承,接口能多继承,但是不能有实现,日常使用中,应该从使用的目的上来决定是否采用抽象类或接口,而不是语法功能上  回复  更多评论   

# re: 关于抽象类和接口的理解: 2008-07-24 13:01 zhuxing

同意楼上(wxm )说的,建议一般不要从语法的层面进行区分。

很关键的一个区别:接口更加灵活,同时能够更好地支持动态扩展。例如,类之间的继承结构体现出了一个中纵向的结构,而接口则可以横向的切入。
再者,接口一般用来封装一个抽象的主题,多表现在行为的变化封装和扩展。



还有,我们在设计一个类型的时候,考虑两件事情:
1、定义其责任,即对外提供的服务,并定义通信的规则。
2、如何创建和实现化改类型。

1解决了如何使用类型的问题,2解决了如何创建的问题。接口相比抽象类能更加自然的将两者进行解耦,而且能够明显加大2的自由度,因为很多时候我们是用工厂的方式对外提供实例。

其实,很多的争论点在如何放置公共功能的问题。其实很多牛人写程序,很多时候很自然的运用Interface/Default Impl的方式,即:你定义了一个接口,顺便提供一个相应的抽象类,提供一些默认的实现。

  回复  更多评论   

# re: 关于抽象类和接口的理解: [未登录] 2008-07-24 14:03 zxbyh

看了以上两位的评论,觉得提出的意见很好,
但是我觉得既然也不是什么非脑筋的事情,何不在语法和应有的两个层面上都理解清楚啦.比较基础的东西,理解透彻点是好事情.

1.
抽象类使用的场合:
类的部分方法是确定的,而另外部分方法是不确定的,只有通过继承的子类去确定这部分方法,
但是子类可以使用抽象类的确定的方法(重用).
------------------------------------------------------
这句话的意思就是说抽象类主要是为了代码或算法的重用.


2.
那么何为接口啦:
就是说有一个类,所有的方法都是不确定的.
比如说 平面形状,总归有获取设置边长,面积这些方法吧,但是怎么去实现是不确定的.
----------------------------------------------------------
上面这一段话,需要改一下,就是说有一个类,所有的方法都是不确定的.但是必须要有这些方法.
换言之:接口是一种约定,是一种规范,你必须满足他,但是不关心你怎么实现.
  回复  更多评论   

# re: 关于抽象类和接口的理解: [未登录] 2008-07-24 19:47 kevin

@zxbyh
你这么一解释,那问题就大了去了 。。。。  回复  更多评论   

# re: 关于抽象类和接口的理解: 2008-07-25 00:43 stanleyxu

abstract class is related to oop. it can be considered as a strict relationship, just like couple.
interface is an easy-to-bind. it can be considered as a loose relationship, just like one night stand  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜