發表文章

目前顯示的是 5月, 2017的文章

differences between app server & web server

剛好看到, 這篇講得滿好的 http://www.javaworld.com/article/2077354/learn-java/app-server-web-server-what-s-the-difference.html

更多了解superclass和subclass的互動

第一個可多了解的是: 當subclass需要用到superclass的method, 並想再對這method額外加上自己的行為 時(也就是說subclass不想完全override掉superclass的method)? --> ans. 可使用super這個關鍵字       e.g.       public void walk() {           super.walk();                         --> 先執行super版的walk()           // subclass's own walk stuff   --> 再回來執行sub版自訂的行為/功能       } 第二個可多了解的是superclass的"存取權限(access level)": --> 共有4種權限(權限最受限制到最不受限制為由左到右排):       PRIVATE -> DEFAULT -> PROTECTED -> PUBLIC --> 這些存取權限控制誰可以接觸什麼, 目前先討論public & private:       public的member會被繼承       private的member不會被繼承

設計繼承步驟 & IS-A test

如何設計繼承的步驟分為5個: step 1: 找出具有共通屬性&行為的物件 step 2: 設計代表共通狀態&行為的class step 3: 決定subclass是否需要有特殊設計的method(也就是讓某行為具有特定不同的表現方式) step 4: 透過尋找使用共通行為的subclass來找到更多抽象化的機會 step 5: 最後完成class的繼承階層 IS-A test: 此測試是適用繼承階層的任一地方, 也就是說, 如果繼承階層樹被設計地很好, --> 則所有的subclass皆應通過任一個上層superclass的IS-A test。 e.g. (繼承順序由上到下) class Animal:     makeNoise()     eat()     sleep()     roam() -->     class Canine:         roam()     -->         class Wolf:             makeNoise()             eat() 寫好繼承階層樹後, 開始做IS-A test: 1. Canine extends Animal    --> 通過 2. Wolf extends Canine    --> 通過 3. Wolf extends Animal    --> 通過 4. Canine IS-A Animal    --> 通過 5. Wolf IS-A Canine    --> 通過 6. Wolf IS-A Animal    --> 通過 可以這麼說: --> Wolf是一個Canine, 所以Canine能做的事Wolf都能做 --> 而且Wolf也是個Animal, 所以Animal能做的事Wolf也都能做 注意: 當我們說"如果X IS-A Y合理"時, 有以下這些可能性:     1. 這兩者或許存在於同一個繼承架構下     2. 這兩者根本是相同的, 或剛好擁有相同的行為 需要記得"X IS-A Y" --> 隱含X可做出任何Y可做的事

繼承簡介

當我們說"a class繼承自b class" --> 以Java方式說: subclass extends the superclass --> 意為subclass繼承了superclass的成員(member) 那什麼是"member"? --> 一個class的member包含:        1. instance variable       2. method subclass可以: 1. 新增自有method 2. 覆蓋(override)過superclass所提供的method, 以改善或延伸superclass原本method內容 最後, 為何instance variable不能被override掉? --> 因instance variable沒有被定義特殊的行為,所以並不需要這麼做。 如果今天subclass需要某instance variable是別的內容, 可以直接在subclass中將該instance variable賦予自己想要的值就好。 e.g.      superclass中, int size = 2;     subclass中, 直接寫int size = 3;