作者swpoker (swpoker)
看板java
標題Re: [問題] 繼承與物件使用的問題?
時間Wed May 22 17:43:20 2013
這是python 2.4的寫法
class Father(object):
def __init__(self):
self.attr='Father'
pass
pass
class SonA(Father):
sonattr1 = 'sonattr1'
pass
class SonB(Father):
sonbttr1 = 'sonbttr1'
pass
sona = SonA()
sonb = SonB()
print sona.attr,sonb.attr
sona.attr = "sona"
sonb.attr = "sonb"
print sona.attr,sonb.attr
sona.attrA = "_sona.attrA_ !!! "
sonb.attrB = "_sonb.attrB_ **** "
print sona.attrA,sonb.attrB
print sona.sonattr1,sonb.sonbttr1
結果是
Father Father
sona sonb
_sona.attrA_ !!! _sonb.attrB_ ****
sonattr1 sonbttr1
完全符合他的要求
想要怎麼添加指定物件的屬性通通都可以
看看sona sonb 這兩個物件
可是跟father 有繼承的關係喔
可是還是可以自己發展
完全不受老爸的限制
原因為何
因為沒有 "宣告" 這種東西
為什麼java得要宣告,然後限制東 限制西的
因為
TIJ
※ 引述《brianhsu (墳墓)》之銘言:
: ※ 引述《brianhsu (墳墓)》之銘言:
: : 我也要來賺 PO 文數……
: 我又重新看了一次原 PO 的問題,發現漏了一個重點:
: 原 PO 你的 Father 到底有沒有 ChildA 和 ChildB 都會用到的函式/變數?
: 如果沒有的話,代表你這根本不是繼承的問題,而是 disjoint data type 的問題,
: 也就是說你想讓 obj 可以存『ChildA 或 ChildB』兩種類型的物件,而 ChildA 和
: ChildB 彼此根本沒有任何關聯。
: 這是可以做到,也是合理的,在 Functional Programming 裡還常常用,例如一個函
: 式的回傳值可能是「正常的結果或 Exception」,但這邊的重點是「正常的結果」和
: 「Exception」本身就是兩個風馬牛不相及的東西,所以你總不會讓你的「正常的結果」
: 的物件是繼承自 Exception 類別吧?這種情況下一開始就不該用繼承來解。
: 如果你是用 Java 的話可以用 Functional Java[1] 裡面的 Either<A, B>[2] 這個類
: 別達到類似的目的。
: 寫起來的程式碼會看起來像下面一樣:
: class ClassA { public String strA = "A"; } // 注意兩者沒有任何繼承關係
: class ClassB { public String strB = "B"; }
: public class Main {
: Either<ClassA, ClassB> obj; // obj 是「ClassA 或 ClassB」
: public void functionA() {
: obj = Either.left(new ClassA)
: obj.left().value().strA
: }
: public void functionA() {
: obj = Either.right(new ClassB)
: obj.right().value().strB
: }
: }
: 但相同的,在其他地方你最後還是要檢查到底 obj 裡是 ChildA 還是 ChildB,
: 你才能知道你到底可以做些什麼事情。
: [1]: http://functionaljava.org/
: [2]: http://0rz.tw/Z61U7
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.29.29.131
推 gmoz:我以為最後面會是BJ4 XD 05/22 17:44
→ swpoker:我只希望不要因此而拋棄JAVA,雖然我現在寫python多點 05/22 17:49
推 PsMonkey:===.==== 整篇幾乎沒有 Java 阿 [指] 05/22 18:22
→ cha122977:python在這問題確實方便 但python也有要特別小心的地方 05/22 22:05
推 a60301:居然是 python !! 05/22 23:55
→ swpoker:請大家相信我可是身在python,心在Java阿 05/23 09:08
→ qrtt1:可是為什麼需要有忠誠度XD 05/23 09:30