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

           }

      }

}

  

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

程序设计-理解java继承-遁地龙卷风的更多相关文章

  1. 深入理解java继承从“我爸是李刚”讲起

    目录 1.继承的概述 2.关于继承之后的成员变量 3.关于继承之后的成员方法 4.关于继承之后的构造方法 5.关于继承的多态性支持的例子 6.super与this的用法 前言 本文主要多方面讲解jav ...

  2. 深入理解Java中的继承

    对于面向对象的程序设计而言,每一个程序员都应该去了解Java中的封装,继承和多态,那么我今天来说的主要是以继承为核心的主题. 一.关于对继承的理解. 继承是面向对象的三大特性之一,是java中实现代码 ...

  3. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  4. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  5. (转)java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  6. Java提高篇之理解java的三大特性——继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  7. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  8. 逻辑思维面试题-java后端面试-遁地龙卷风

    (-1)写在前面 最近参加了一次面试,对笔试题很感兴趣,就回来百度一下.通过对这些题目的思考让我想起了建模中的关联,感觉这些题如果没接触就是从0到1,考验逻辑思维的话从1到100会更好,并且编程简易模 ...

  9. (转)java提高篇(四)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

随机推荐

  1. (golang)HTTP基本认证机制及使用gocolly登录爬取

    内网有个网页用了HTTP基本认证机制,想用gocolly爬取,不知道怎么登录,只好研究HTTP基本认证机制 参考这里:https://www.jb51.net/article/89070.htm 下面 ...

  2. 文本分类实战(三)—— charCNN模型

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  3. rtsp 流媒体服务器,播放器

    https://github.com/EasyDSS/EasyPlayer-RTSP-Android EasyPlayer EasyPlayer RTSP Android 播放器是由紫鲸团队开发和维护 ...

  4. log4cplus 简单记录

    请注意区别对待: 1.2.1  :  不支持 C++11,比如 std::move 就会 fail. 2.0.1  :  支持 C++11,比如 std::move 就 ok. 完.

  5. 2018-2019-2-20175332-实验二《Java面向对象程序设计》实验报告

    一.单元测试 实验要求:参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习 提交最后三个JUnit测试用例(正常 ...

  6. Kafka 详解(一)------简介

    在前面几篇博客我们介绍过一种消息中间件——RabbitMQ,本篇博客我们介绍另外一个消息中间件——Kafka,Kafka是由LinkedIn开发的,使用Scala编写,是一种分布式,基于发布/订阅的消 ...

  7. PHP 练习(新闻发布)

    1.新闻发布主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  8. 玩转3D Swiper美女性感秀之思路分析总结

    前言 继一次的3D魔方之后,这次利用CSS3的transform.translate.rotate.preserve-3d等结合JS的requestAnimationFrame.class带你一起玩转 ...

  9. 【Swift 3.1】iOS开发笔记(四)

    一.唱片旋转效果(360°无限顺时针旋转) func animationRotateCover() { coverImageView.layer.removeAllAnimations() let a ...

  10. python对 if __name__=='__main__'的理解

    对于学过其他编程语言的人来说都知道程序都是从main函数开始执行的,而对于python来说他并没有主函数,他不像其他语言需要需要转化为二进制文件 然后才能执行,他时通过翻译器从第一行开始逐行执行,所以 ...