面向对象的思想中,封装,继承,多态作为特性会在开发中广泛应用,一个健壮的系统除了功能强大以外,它的可扩展性应该也很强,多态恰好应用了这个思路。

下面我以杨小聪去某地的方式为例,我们知道首先杨小聪要去某地的话需要驾驶交通工具,那么我首先定义一个Driver类负责驾驶

public class Driver {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public void drive(Vihecle v) {
v.go(this,new Address("武汉"));
} }

上述name代表驾驶员的名字,drive代表如何驾驶,Vihecle代表交通工具,因为我目前还不知道用什么交通工具,所以我们可以把此类定义为抽象,我们知道所有的交通工具都是可以有驾驶的方法,那么GO就作为一个抽象方法,我这里只定义它为抽象方法,没有具体实现,仅仅把驾驶员的信息与目的地址当参数传入。

public abstract class Vihecle {
public abstract void go(Driver d,Address dest);
}

既然由驾驶员Driver ,驾驶方法drive,驾驶的交通工具Vihecle,那么接下来就需要定义目的地址了Address,name代表目的名称

public class Address {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Address(String name) {
super();
this.name = name;
} }

接下来我们就可以定义实际交通工具类了,这里我以汽车Car,与飞机Plane两个类为例。这两个类同时都继承了交通工具Vihecle,那么我在实际调用中就可以不用多次传值了。

public class Car extends Vihecle{
public void go(Driver d,Address dest) {
System.out.println(d.getName()+"开车去" + dest.getName());
}
}
public class Plane extends Vihecle{
@Override
public void go(Driver d, Address dest) {
// TODO Auto-generated method stub
System.out.println(d.getName()+"坐飞机去" + dest.getName());
}
}

最后我们可以写一个测试类来测试结果

public class Test {
public static void main(String[] args) {
Driver d = new Driver();
d.setName("杨小聪");
d.drive(new Car());
d.drive(new Plane());
}
}

输出结果:

杨小聪开车去武汉
杨小聪坐飞机去武汉

总结:

其实我们也可以在Driver类中按交通工具每个类来定义方法,但是这样的设计思路不够灵活每次去还要修改这一层的代码。将开车的方式抽象化,我们站在客户的立场上为他们设计,客户想要开车我们就将对应车的对象传入,这样的方式扩展性很强,如果他还想做火车,我们重新定义一个火车类来继承Vihecle,Driver部分我们不需要修改任何逻辑。

多态的三个特性,有继承,有重写,有父类的引用指向子类的对象。

JAVA编程心得-多态设计初步的更多相关文章

  1. java编程思想-多态

    java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是动态绑定即运行时绑定. public class test { private void ...

  2. JAVA编程心得-Eclipse/MyEclipse 中文乱码解决办法

    将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,主要原因就是别人的IDE编码格式和自己的Eclipse编码格式不同.总结网上的建议和自己的体会 ...

  3. JAVA编程心得-JAVA实现CRC-CCITT(XMODEM)算法

    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定. 1 byte checksum CRC ...

  4. Android编程心得-Service数据绑定初步

    在Android里,Service的数据绑定是一种重要的用法,我们知道Service与Activity一样是运行在当前应用进程的主线程里面的,他们之间交互的方式有多种,下面我来介绍一下如何使用数据绑定 ...

  5. 转:二十七、Java图形化界面设计——容器(JFrame)

    转:http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的, ...

  6. 二十七、Java图形化界面设计——容器(JFrame)

    摘自http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的, ...

  7. Java图形化界面设计——容器(JFrame)

    Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...

  8. 01 Java图形化界面设计——容器(JFrame)

    程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构,现在就进入java图形化界面编程. 一.Jav ...

  9. Java编程的逻辑 (15) - 初识继承和多态

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

随机推荐

  1. [codility]PrefixMaxProduct

    Codility Certificate题目.求product最大值,product为长度*出现次数,例子"abababa"如下: "a", whose pro ...

  2. JS 中Promise 模式

    异步模式在web编程中变得越来越重要,对于web主流语言Javscript来说,这种模式实现起来不是很利索,为此,许多Javascript库(比如 jQuery和Dojo)添加了一种称为promise ...

  3. 【Quick 3.3】资源脚本加密及热更新(三)热更新模块

    [Quick 3.3]资源脚本加密及热更新(三)热更新模块 注:本文基于Quick-cocos2dx-3.3版本编写 一.介绍 lua相对于c++开发的优点之一是代码可以在运行的时候才加载,基于此我们 ...

  4. 正则 ?<= 和 ?= 用法

    参考网址:http://baike.baidu.com/link?url=2zORJF9GOjU8AkmuHDLz9cyl9yiL68PdW3frayzLwWQhDvDEM51V_CcY_g1mZ7O ...

  5. make menuconfig出错

    make[1]: *** [scripts/kconfig/mconf] Error 1 make: *** [menuconfig] Error 2 fixed: sudo apt-get inst ...

  6. ActionBar官方教程(5)ActionBar的分裂模式(底部tab样式),隐藏标题,隐藏图标

    Using split action bar Split action bar provides a separate bar at the bottom of the screen to displ ...

  7. 【HDOJ】3016 Man Down

    线段树+spfa求最长路.逆向思维,从最底下一块板子建图.需要注意的是任何一个板子掉落下面再无板子,此时都可以看做一个终结状态. /* 3016 */ #include <iostream> ...

  8. Oracle EBS R12 WIP Component Issue&Return Process

    oracleassemblytransactionscomponentsjobsreference 目录(?)[-] 定义BOM 定义Routing 定义WIP Discrete Job 发料 Mat ...

  9. 【转】Windows7打造全方位护眼系统

    原文网址:http://www.cnblogs.com/duboway/archive/2013/04/20/3033257.html 电脑屏幕: Win7和Vista系统设置如下: 第一步:桌面空白 ...

  10. LoadRunner调用Java程序—性能测试

    为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunner如何调用Java测试代码,完成压力测试. 通常我 ...