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

下面我以杨小聪去某地的方式为例,我们知道首先杨小聪要去某地的话需要驾驶交通工具,那么我首先定义一个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. maven 依赖排除

    在项目中遇到一个问题,项目使用spring 3.x,引用了某些包,这些包又依赖了spring2.x,造成项目无法启动.这种情况就需要用到maven的依赖排除,配置如下: 使用以下代码排除依赖xxxx引 ...

  2. C++的表驱动法

    目的:使用表驱动法,替换复杂的if/else和switch/case语句. 说明:JS 等其他语言也都支持的. 表驱动发示例:http://blog.csdn.net/zhouyulu/article ...

  3. S5P4418开发板使用要点

    一.调试工具 1)USB 转串口驱动:用于驱动板子的串口板,电脑与板子进行调试串口通信2)量产软件 USB驱动安装:用于 NXUsbBurner_Ver1.0.6 软件镜像烧写(量产工具)3)调试工具 ...

  4. android:process为耗资源操作指定一个新进程

    当有一些耗费内存比较多的操作时,可以通过android:process指定一个新的进程.保证程序运行. 例如: 一个后台长期运行的service: <service android:name=& ...

  5. Windows7 64下MinGW64/MSYS环境搭建

    原文出处: CompileGraphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64 http://www.kinetic ...

  6. wcf service library

    创建wcf服务库的时候,系统自动生成的代码 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”. [ServiceContract] publ ...

  7. weblogic配置数据源出错

    Connection test failed. Listener refused the connection with the following error: ORA-12505, TNS:lis ...

  8. 使用PowerDesigner建立数据库模型

    转自:http://www.cnblogs.com/tonyepaper/archive/2008/02/12/1067260.html 1.       打开PowerDesigner,点击File ...

  9. 《转》如何让你的网页加载时间降低到 1s 内

    当初分析了定宽高值和定宽高比这两种常见的图片延迟加载场景,也介绍了他们的应对方案,还做了一点技术选型的工作. 经过一段时间的项目实践,在先前方案的基础上又做了很多深入的优化工作.最终将好奇心日报的网页 ...

  10. SQL Server触发器以及如何在SQL Server Manager中调试触发器

    ·只有inserted表有数据时,当前操作为insert:·inserted和deleted两张表都有数据时,当前操作为update:·只有deleted表有数据时,当前操作为delete. 1. C ...