(0)寫在前面 編程和現實世界是息息相關的,你是如何理解現實世界中的繼承呢? 繼承在編程中應理解為:對父類資源(本文只討論方法)的使用,父類方法只提供類基本的功能,父類方法之間不存在調用關係。 (1)案例介紹 我們有這樣一個任務,控制一個人上下左右移動,我們開始構建類。 等等,上面的類違反了高內聚低 ...
(0)寫在前面
編程和現實世界是息息相關的,你是如何理解現實世界中的繼承呢?
繼承在編程中應理解為:對父類資源(本文只討論方法)的使用,父類方法只提供類基本的功能,父類方法之間不存在調用關係。
(1)案例介紹
我們有這樣一個任務,控制一個人上下左右移動,我們開始構建類。
public class Person { public void left(){} public void right(){} public void up(){} public void down(){} public static void main(String[] args) { String flag = "左"; Person person = new Person(); if("左".equals(flag)) { person.left(); } else if("右".equals(flag)) { person.right(); } else if("上".equals(flag)) { person.up(); } else if("下".equals(flag)) { person.down(); } } }
等等,上面的類違反了高內聚低耦合原理,我將Person的大量方法暴漏在外面,於是我改成下麵的實現
public class Person { public static String LEFT = "左"; public static String RIGHT = "右"; public static String UP = "上"; public static String DOWN = "下"; private void left(){} private void right(){} private void up(){} private void down(){} public void move(Object flag) { if(LEFT.equals(flag)) { left(); } else if(RIGHT.equals(flag)) { right(); } else if(UP.equals(flag)) { up(); } else if(DOWN.equals(flag)) { down(); } } public static void main(String[] args) { Person person = new Person(); person.move(person.LEFT); } }
這樣還是有不好的地方,move方法只是left、right、up、down方法的使用方式,它的存在不利用代碼的復用,於是我換成了下麵的實現。
public class Person { public static String LEFT = "左"; public static String RIGHT = "右"; public static String UP = "上"; public static String DOWN = "下"; protected void left(){} protected void right(){} protected void up(){} protected void down(){} }
Person類屬於功能層,功能層是純粹的,要避免組合的出現,至於這個人到底層怎麼走,我們在應用層實現,應用層也是業務邏輯體現的地方。
public class My extends Person { public void move(Object flag) { if(LEFT.equals(flag)) { left(); } else if(RIGHT.equals(flag)) { right(); } else if(UP.equals(flag)) { up(); } else if(DOWN.equals(flag)) { down(); } } }
嗯,你可能需要只能上下移動的角色哦!