java 板


LINE

原文吃光光,就interface跟abstract class讲一下我体悟的概念 interface就像是技能类,例如今天你老板需要一个java人才 所以你头上挂着名为Java的interface,宣告着我会java, 然後你就可以被老板使唤(咦!?) 但做得好不好,只有你知道,你老板不会知道, 因为老板只会跟你说"东西呢?"。 因此上述这段话用code来描述就是 public interface Java { public String coding(); } public class You implements Java { @Override public String coding() { System.out.println("要不然你来做啊"); // 这里是OS boolean deadLineIsComing = true; String report = deadLineIsComing ? "快好了" : "快好了"; return report; // 给老板的话 } } public class Boss { public static void main(String[] args) { Java javaSkillGuy = new You(); Boss boss = new Boss(); boss.cryNorth(javaSkillGuy); } public void cryNorth(Java freshLiver) { String report = freshLiver.coding(); System.out.println(report); } } 上述老板的cryNorth这个method是接Java这个技能, 因此进去之後,老板只会知道你有coding这个method可以使唤, (因为Java这个interfac里面只有coding的method) 如果你有其他例如唱歌跳舞的method可以使唤,你老板并不会知道, 因为在他cryNorth的时候是用Java来看你这个人(instance)。 那interface有什麽优点? "过共同的介面耦合不同实作,而不需要去管实作细节,达到低耦合高内聚。" (关於低耦合高内聚这句话请自行估狗,看不懂也没关系, 我也是写个两年後才能体悟这句话的精随,先有概念就好了。) 上述这句话套到刚刚个例子就老板需要一个会Java的人使唤(共同的介面), 例如我跟你都会Java,都可以被使唤coding(不同实作), 但我们写作风格、习惯不同(实作细节), 对老板而言,他不care我们的写作风格、习惯(不需要管实作细节), 他只知道使唤你之後必须得到一个结果(一个字串)。 那麽interface既然是技能类,就代表其实每一个人(instance)可以有好多个技能, 因此一个类可以implements好多个interface,等着需要的人来使唤你(工具人的概念)。 如果上面看懂了的话, 延伸一个思考"如果两个interface有一模一样的method同时被实作时怎麽办?" 这个问题很简单,自己实作一下,就会有答案罗。 (我当初自学也是这样学 :)) 现在来谈abstract class。 这跟继承概念有关,但这里我只针对abstract method解释(因为我懒了 XD), 若看不懂的话,继承概念请再多估狗罗。 例如今天你想成一个魔法师,像我一样(咦!?) 然後魔法师这个职业拥有戴上墨镜酸酸这两个方法, 这时候我们去承袭了魔法师这个职业之後,我们就拥有了这两个方法,对吧? 然後今天突然系统改版,魔法师多了一个方法叫combo, 就是今天走在路上被闪光攻击时,会被trigger这个combo方法, 那这个方法会做戴上墨镜>崩溃>酸酸这三件事, 这时候魔法师这个职业,不想知道崩溃的细节, (因为知道的话可能所有的魔法师都崩溃了) 因此它将崩溃宣告为abstract,让子类去实作细节, 然後在combo里照顺序呼叫就好了。 因此我跟你就会分别实作了崩溃,当然我们崩溃方式不一样啦 XD 总之,这个时候我们的实作里面只会看到override崩溃这个方法,乾乾净净, 看不到其他东西。 这意思是什麽? 意思就是说如果有一系列固定的动作,想让不同的人去做, 但又有其中一两个动作不一样时, 可以透过这样的方法,让子类可以专注在崩溃上面,而不用去管其他事情。 (除非你想改变魔法师戴上墨镜这个方法,那就overrider戴上墨镜, 让combo呈现不同的结果,其实这也就是继承之後,能够拓展父类的概念。) 而对於放闪光攻击的人,就是呼叫combo这个方法,让你执行这三件事情。 大意上是这样,但怎麽设计又是另一门艺术,我也还在学习中。 其实上述这件事情,也可以抽出来变成一个interface, 里面包含combo戴上墨镜崩溃酸酸四个方法, 然後再多一个玩家的abstract class去implements这个interface,不实作任何一个方法。 让魔法师去继承玩家,实作combo戴上墨镜酸酸这三个方法, 将崩溃留给子类去实作。 这样子修改之後,对於我们(子类)来说完全没有变,我们不会知道上面发生了时候事情, 但这时候放闪光的人,就可以对任何implements这个interface的玩家(或者是NPC?), trigger combo这个方法。 (上述我懒得写code了,有兴趣自己照着描述去写code吧@@) 这样就可以在不影响实作类(就是我跟你)的状况下修改结构,让呼叫的层级拉到介面, 扩大能被调用的可能性。 其实重点就是分层的概念,我在写这支class的时候, 我不想看到或不在乎然後又会需要存在的东西,把它往上放到父类, 这样我就可以专注在自己的实作上。 以上是小弟我写了三年的心得,如有任何错误,欢迎指正。 PS:其实这个概念我很早就知道了,只是直到最近新公司, 给我极大的权限让我handle整个系统,我在开发modle的时候, 才真正可以理解设计时该如何拆这些东西,达到好的弹性的架构。 因此概念懂归懂,还是要不断的写才能有深刻的体悟啊 (菸) -- 我们全心全意的爱你 我们全心全意的爱你 亲像爱自己的母亲 亲像爱自己的母亲 不是你的土地特别香 不是你的物产特别丰富 929 吴志宁 因为你的怀抱这麽温暖 因为你用艰苦的奶 养大了我们 全心全意爱你 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.205.214
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1443334164.A.D51.html
1F:推 WrongHole: 笑了 09/27 20:10
2F:推 putumaxally: 有笑有推 09/28 02:35
3F:推 james732: 看到cryNorth就笑了XDDDDD 09/28 10:14
4F:推 alex817: 很生动 09/28 12:18
5F:推 cha122977: XD 09/29 12:25
6F:推 tzk28419: 超可爱的啦!推 09/29 14:27
7F:推 kina: 推 09/30 10:29
8F:推 jaspreme206: 推推 10/03 02:30
9F:推 guest62: 哈哈赞 11/27 19:27
10F:推 z5612365: 推个 12/07 06:01
11F:推 Isaea: 哈哈哈大推 05/03 01:01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP