(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(); } } }
嗯,你可能需要只能上下移动的角色哦!