zoukankan      html  css  js  c++  java
  • 程序设计-理解java继承-遁地龙卷风

    (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();
    
               }
    
          }
    
     
    
    }
    

      

    嗯,你可能需要只能上下移动的角色哦!

     

  • 相关阅读:
    Daemon Tools手工完全卸载方案
    不要轻易删除/windows/install下文件
    Dumpbin命令的使用
    v4l2 视频捕获
    2瓶4两酒,1个1.5两的酒杯
    n个平面分空间最多可分成多少份
    &#65279导致页面顶部空白一行解决方法
    Base64编码原理分析
    浏览器中“JavaScript解析器”工作原理
    IList转化为DataSet,解决了System.nullable()的问题
  • 原文地址:https://www.cnblogs.com/resolvent/p/6357702.html
Copyright © 2011-2022 走看看