查看: 1207|回复: 9
|
关于oopt interface~
[复制链接]
|
|
我不明白interface的定义是什么。。。。。。。为什么我们需要implements他。。。。。。。interface class不是只有abstact method 和constant 吗。。。。。请各位指点下,想了很久 |
|
|
|
|
|
|
|
发表于 12-1-2013 10:39 PM
|
显示全部楼层
根据个人的了解,interface的主要目的是在于确保所有implement它的classes都会有那些必要的特性,so that其他人可以根据各自的喜好去使用它,同时不影响你的系统的运作。
比较生活化的例子就是报告吧。通常一份报告都会有一个template,告诉你你的报告里面需要有什么部分,但是它不会告诉你怎么写。你要怎么写就怎么写,最重要是确保每一个部分都有写到。Interface就像template那样,告诉其他开发者如果你要integrate我的系统,你必须要有哪些methods。
你可以看看这个网站的解释: http://www.cnblogs.com/oomusou/archive/2007/05/07/738311.html 本帖最后由 zblue89 于 12-1-2013 10:56 PM 编辑
|
|
|
|
|
|
|
|

楼主 |
发表于 13-1-2013 12:32 AM
|
显示全部楼层
o你这样说,我大概明白了。。 erm..对了。。我们写program好像很少用到polymorp 和 interface对吧? |
|
|
|
|
|
|
|

楼主 |
发表于 13-1-2013 12:41 AM
|
显示全部楼层
还有关于polymorp ....好像
Human = superclass Programmer =subclass
Human myProgrammer = new Programmer();
为什么可以有human 的class 来create programmer 的object??
|
|
|
|
|
|
|
|
发表于 13-1-2013 04:35 PM
|
显示全部楼层
唔。。。要看你是做什么系统吧。
一般上这些interface和polymorphism比较常用在develop framework吧。
至于普通的系统有没有用到,我就不是很清楚了,因为我的经验还不是很多。。。
关于你的另外一个问题,为什么human class可以用来create programmer。那是因为programmer是human的其中一种,所以我们可以那样做。但是据我所知,当你这样做的时候,你只能使用human class里面的methods and variables。如果你要用programmer里面的东西,你必须do casting。之前在尝试了解这个东西时有做过一些测试,那时候发现的。但是我也不是很清楚为什么需要那么做。我只知道,所有superclass都可以用来create subclass object,就这样。 |
|
|
|
|
|
|
|

楼主 |
发表于 13-1-2013 06:01 PM
|
显示全部楼层
和我想的一样叻。。你还读着书吗?btw, 希望有人能帮忙解答下
|
|
|
|
|
|
|
|
发表于 13-1-2013 07:43 PM
|
显示全部楼层
嗯,目前还在读书。今年年中才会毕业。
你把你不明白的地方写仔细点,可能其他人比较容易帮忙。 |
|
|
|
|
|
|
|

楼主 |
发表于 27-1-2013 03:02 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 27-1-2013 05:55 PM
|
显示全部楼层
你的学校教到用java connect db了吗?
如果已经教到这里了, 那我用Connection来做例子会比较容易明白
如果你的软件, 是需要链接去db的, 基本的链接方法大概如下吧
- String strConn = getConnUrlFromPropertiesFile(); //eg: jdbc:postgres/xxxx
- Connection conn = DriverManager.getConnection(strConn, username, password);
复制代码 以上的code/function只是举例而已...我不是很记得
比如你的db现在是postgresql, 突然有1天你想换mysql, 那你有必要改过你的sourcecode吗? 没必要是吗?
你只需要把mysql的driver.jar搬进来, 然后改1改strConn (在properties file改), 你的软件就可以如常操作
说到这里, 有领悟了? 其实Connection就是1个Interface, 每个db都要去implements java.sql.Connection, 然后配合自己的db code进去。
而DriverManager就类似1个Factory, 会根据你的strConn来return1个正确的class给你
看到Interface的好处了? 如果没有Connection这个Interface, 用mysql时就要有mysql的写法, 用postgresql就要有postgresql的写法, 不累死才怪
所以在oop有句话叫program to interfaces, not implements
至于小软件需不需要用到interface, 这是很见仁见智的, 谁知道你接下来会打算怎样improve你的小软件? 如果1开始有好的design, 以后是方便了自己也方便接手的人。
推荐你去读1本叫Head first design pattern的书, 里面的example不一定就是最正确的, 但是生动而且深入浅出
(编辑过, 之前少打"不一定"这3个字...误会蛮大的 )
如有错请插小力点 本帖最后由 nsda 于 27-1-2013 11:31 PM 编辑
|
|
|
|
|
|
|
|
发表于 31-1-2013 12:00 PM
|
显示全部楼层
我在UPM读software engineering
感谢楼上的指教。
受教了。谢谢。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|