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

程序设计-理解java继承-遁地龙卷风的更多相关文章
- 深入理解java继承从“我爸是李刚”讲起
目录 1.继承的概述 2.关于继承之后的成员变量 3.关于继承之后的成员方法 4.关于继承之后的构造方法 5.关于继承的多态性支持的例子 6.super与this的用法 前言 本文主要多方面讲解jav ...
- 深入理解Java中的继承
对于面向对象的程序设计而言,每一个程序员都应该去了解Java中的封装,继承和多态,那么我今天来说的主要是以继承为核心的主题. 一.关于对继承的理解. 继承是面向对象的三大特性之一,是java中实现代码 ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- (转)java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- Java提高篇之理解java的三大特性——继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- 【转】java提高篇(二)-----理解java的三大特性之继承
[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...
- 逻辑思维面试题-java后端面试-遁地龙卷风
(-1)写在前面 最近参加了一次面试,对笔试题很感兴趣,就回来百度一下.通过对这些题目的思考让我想起了建模中的关联,感觉这些题如果没接触就是从0到1,考验逻辑思维的话从1到100会更好,并且编程简易模 ...
- (转)java提高篇(四)-----理解java的三大特性之多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
随机推荐
- Cookie Session 与Token
由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ...
- Spring的事件机制详解
同步事件和异步事件 同步事件:在一个线程里,按顺序执行业务,做完一件事再去做下一件事. 异步事件:在一个线程里,做一个事的同事,可以另起一个新的线程执行另一件事,这样两件事可以同时执行. 用一个例子来 ...
- WinForm程序完全退出总结
this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: Application.Exit(); 强制所有消息中止,退出 ...
- 真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService(转载)
WebService历来都很受重视,特别是Java阵营,WebService框架和技术层出不穷.知名的XFile(新的如CXF).Axis1.Axis2等. 而Sun公司也不甘落后,从早期的JAX-R ...
- UNICODE与ASCII
1.ASCII的特点 ASCII 是用来表示英文字符的一种编码规范.每个ASCII字符占用1 个字节,因此,ASCII 编码可以表示的最大字符数是255(00H—FFH).这对于英文而言,是没有问题的 ...
- C++ 中 auto 与 decltype 的用法与区别
最近在恶补 C++ 知识的时候,学习到了一些 C++11 标准的新特性,利用这些新特性,我们能够更快地提高编程效率,从而实现我们的目标,在此特意记下学习过程中所学习到的一些东西,方便日后的回顾和复习. ...
- oracle实例安装到 4% 不能继续安装
较为悲催的问题, 一直不知道如何解决: 偶尔听到群里的大神提起: 今天特地拿出来分享一下: 希望大家碰到能早点解决 是CPU问题: 将cpu 核心数 改为 2的指数倍: 或者将cpu打上补丁就好了: ...
- svn 钩子应用 - svn 提交字符限制, 不能为空
一.版本库钩子 1.1 start-commit 开始提交的通知 输入参数:传递给你钩子程序的命令行参数,顺序如下: 1. 版本库路径 2. 认证过的尝试提交的用户名 3. Depth,mer ...
- 遍历CheckBox根据指定条件做筛选js
$('#del').click(function(){ var checkeds=$('input[name=cid]:checked') checkeds.each(function() { var ...
- 在CENTOS上源码搭建LNMP环境
前言 1.操作前提: CentOS Linux release 7.5.1804: sudo用户(需要root权限): 2.需要安装的组件: nginx稳定版:nginx-1.14.0: MariaD ...