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

下面我以杨小聪去某地的方式为例,我们知道首先杨小聪要去某地的话需要驾驶交通工具,那么我首先定义一个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. 内存不足时Android 系统如何Kill进程

    [转]内存不足时Android 系统如何Kill进程 大家其实都或多或少知道,Android系统有自已的任务管理器,当系统内存不足时,系统需要KILL一些进程(应用),以回收一部分资源,来保证系统仍可 ...

  2. Form.KeyPreview 属性

    Form.KeyPreview 属性 今天再做KeyDown 和 KeyUp 事件时,就是忘了设置,窗体的KeyPreview 属性,所以KeyDown 和 KeyUp 事件没有反应(这里说明一下,本 ...

  3. 【HDOJ】1262 寻找素数对

    典型的二分决策树.而且本身两数和是偶数. #include <stdio.h> #include <string.h> #define MAXNUM 10001 int isP ...

  4. hihocoder #1289 : 403 Forbidden (2016 微软编程笔试第二题)

    #1289 : 403 Forbidden 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi runs a web server. Sometimes ...

  5. URAL1012. K-based Numbers. Version 2

    链接 考查大数 正好拿来学习下JAVA JAVA好高端.. import java.io.*; import java.math.*; import java.text.*; import java. ...

  6. bzoj3626

    百度空间马上要下架的说,赶快把最后一点题解补完,然后搬家这是一道不错的题,首先注意询问是满足区间减法的,我们把他变成前缀和表示设我们询问[1,r]中的点和z的LCA深度和,假设我们确定一个根,不难发现 ...

  7. bzoj3171

    不难发现,每个点出度显然为1,要想整个图形成环,必然每个点的入度也为1: 所以,不难想到将每个点i拆成两个点i1,i2构成二分图, 连边s--->i1 流量为1,费用为0,i2--->t流 ...

  8. 六月计划#2B(6.10-6.16)

    4/7 STL set 数学 快速傅立叶(FFT) 高斯消元 动态规划 斜率优化

  9. BZOJ_3039_玉蟾宫_(动态规划+悬线法)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3039 n*m的矩阵由R和F组成,求全是F的子矩阵的大小的三倍. 分析 悬线法: 浅谈用极大化思 ...

  10. [Swustoj 24] Max Area

    Max Area 题目描述: 又是这道题,请不要惊讶,也许你已经见过了,那就请你再来做一遍吧.这可是wolf最骄傲的题目哦.在笛卡尔坐标系正半轴(x>=0,y>=0)上有n个点,给出了这些 ...