發表文章

目前顯示的是 4月, 2014的文章

[Java] Absolute Java (5E) Ch 8 (1)

圖片
第八章: Polymorphism 把一個method的name去綁上很多meaning sub class 去改 parent class 的 method 叫做override 如果method是static,則在compile時就binding了(early binding) 沒有late binding 以下沒有late binding final class :  不能被繼承 final method : 不能被override private Upcasting 與 Downcasting 例如 A <-- B ,B繼承A 則下面可以做的到: A  r = new B(); B  x = (B) r; 形態可以上上下下 A <-- B <-- C B <-- D 用 instanceof 來問是否是我們需要的物件type來確保安全!

[Java] Absolute Java (5E) Ch 7 (2)

圖片
繼承: 箭頭指向往上(parent) 叫做 generalize 箭頭指向往下(child)叫做 specialize 這種關係叫做 extends override 的 method 比 parent 的限制還要鬆 因為 return 的時候要給原本 parent 的也可以接得住 Encapsulation 與 Inheritance 出現的問題 假設兩的Class A 跟 B A <--- B A 是 parent A當中有private method B可以access A 當中的所有public method 但是B 可以用A當中的一些getter setter找到 A 的 private method p.s. constructor 全部都沒有被繼承 因為會自動補super !! A B C 在同一個package裡面,A被C, D繼承 然後D跟E在別的package裡面 Access Modifiers 實驗1 前面四個v1 ~ v4 沒寫其實是 this.v1 ~ this.v4 所以v4就算是public也不能access 但是如果new一個 A 物件就可以access到除了private之外的人 C繼承A,所以除了private之外都可以直接拿的到! D也繼承A但是不同package,所以就算繼承了看不到default的v2 有繼承到 v3 跟 v4 ,所以this 直接可以 access 到 有趣的是 下面new 的 A reference無法看到原本 protected 的 v3 Access Modifiers 實驗2 再來看static 的影響: Access Modifiers 實驗3 static method 沒有 override !!! 結論:static method 不會被override, 所以r2.m1()其實是在call自己的沒有override到parent, 而r3.sm1()則是在call原本的A的 static method沒有override! 繼承是一個 Is a 關係 不是 has a 關

[筆記] 全球音樂文化 2014/04/22 歐洲

圖片
世界音樂在歐洲 風笛,全歐洲都有! 本次主題: 1. 保加利亞 (東歐巴爾幹半島) 2. 愛爾蘭 (西歐) 歐洲各地有著共同的西洋古典音樂傳承的樂理,加上各地的傳統音樂文化特色 United in Diversity 歐洲共有的音樂文化: - 溫帶氣候區類似的農作週期  -- 相仿的農事祭儀歌舞,室內外娛樂活動時程 - 基督宗教信仰普遍  -- 相同的宗教節日,共享的宗教音樂 - 歷史發展與遺產  -- 貴族與社會精英的音樂生活 - 民間音樂的衰落與再興 俄羅斯農村有一群斯拉夫人遷徙到保加利亞 帶來了獨特的唱腔,長音抖音 瞬間轉音,真假音混合 呼喊方式的唱法 Kaval 又叫做巴爾幹簫,吹奏發聲原理跟中東的 nay(ney) 很像! 風笛:演奏方式,先把氣吹到皮囊裡面,再慢慢擠出來 有 持續音管 只有 一根 管 風笛演奏的主旋律跟著主唱一起,並且加上一些抖動的裝飾音 蘇格蘭風笛的 持續音管有 三根 ,通常音是 1 5 1 (泛音列前三個) 下面的運指的管子可以演奏旋律變化 風笛聲音極大聲,常出現在婚宴場合教堂外面等活動 Gudulka 唸作"古都卡"  底下的弦不拉自己會共鳴的共鳴弦,負責演奏持續音 弓用馬尾的毛來製作 Tupan 鼓用一粗一細兩種鼓棒,粗的比較沒有彈性,細的有彈性 可製造不同聲響效果 特色:齊聲合奏,沒有和聲伴奏!加上大鼓 不像中東那種有支聲複音 跟西洋古典音樂沒有關聯 巴爾幹半島除了偶數拍曲子之外,還有許多奇數拍的曲子 打拍子的地方會有停頓點,例如七拍子的曲子打在1 3 5上面 12 34 567 o   o   o 重視婚禮歌舞,老一輩認為沒有風笛手不能結婚! 近代年輕人結合傳統與現在發展出電音舞曲 含有傳統唱腔以及持續音的元素 愛爾蘭 最重要的兩個曲式:Jig 與 Reel  一首曲子 32 小節,有四句,一句 8 小節 曲例  Jig ( XOX XOX  , XXX XXX ) Reel ( XX XX ) 愛爾蘭的風笛:鐵達尼號配樂用的風笛 肘風笛,不能吹!用手肘打氣進

[Java] Absolute Java (5E) Ch 7 (1)

圖片
Overview - Define inheritance, polymorphism, overloading, overriding, and virtual method invocation 1. 為何需要繼承 inheritance ? 看看下面的兩個class 其實 Employee 跟 Manager 只差一個欄位,就要把所有code的method重寫一遍,很麻煩,要可以重複再利用會方便很多,所以出現了Inheritance的概念。 繼承的人只需要寫多出來的東西就可以! Java 的繼承用 extends 這個關鍵字 單一繼承,只繼承來自一個人 多重繼承,像是我就同時繼承來自兩個人 (父母) IS-A relationship 所謂 is a:"是其中一種" 的概念 所以Manager 繼承 Employee 其實 Manager is a Employee 也是成立的 Extend 延伸關係,擴充的概念,越下方的地方需要被定義的屬性就越多 圖書館,PTT,選課:沒有Extend延伸關係 生物,族譜,(遊戲) 技能轉職,貨品分類 例1: 圓錐曲線 橢圓 圓 雙曲線 拋物線 圓錐曲線 --  橢圓  -- 圓 |              |       雙曲線    拋物線 上面的hierarchy是以IS-A的概念畫出的 例2: 實數 -- 有理數 -- 整數 這也是以IS-A的概念畫出的 回到圖例: Employee <-- Manager <-- Director 這是用 Extend 的概念畫出來的 越上層的類別,所能夠包含的物件種類越多,所以共通屬性越少 越下層的類別,所能夠包含的物件種類越少,所以共通屬性越多 在這概念之下: 圓(半徑) <-- 橢圓(長軸,短軸) 因為橢圓要知道長軸短軸,屬性較多 而圓只需要知道半徑就好,屬性較少 但其實 圓 擴充自 橢圓 是 限制條件 擴充:長軸 = 短軸 所以應該寫成這樣 橢圓 <-- 圓(加上擴充條件) 針對擴充的東西,要使用原來的function可能會更有限制, 所以要把一些原先繼承來的方法(function)