一、多态

1、含义

一种类型,呈现多种状态。主要关注类多态、方法多态。

2、多态的前提:继承

使用父类引用指向子类对象:

Animal a1 = new Cat();

Object a1 = new Cat();

3、多态的三大定理

1)对象不变,new Cat();不会变为Dog对象;

2)编译时只能调用编译时类型已定义的方法,a1.eat();不能调用Animal未定义的方法,不能调用Animal未定义的方法;

3)运行时调用的是运行时类型覆盖后的方法 ;(调用的是什么?)      (非static)

4、对定理2的补充

无法调用子类特有的方法,采用强制类型转换,需要注意类型的判断,避免ClassCastException(类型转换异常。)

if(a1 instanceof Dog){

Dog d1 = (Dog)a1;

d1.watchHouse();

}

5、多态的分类

1)基本类型多态

2)类多态

3)方法多态

a、编译时多态:重载

编译时决定调用哪个方法

b、运行时多态:覆盖

运行时决定调用哪个方法

6、多态的应用

思路:面向父类编程 ->抽象 -> 通用;

适合做设计,形成通用的程序(框架技术)

(1)在方法的参数表中使用多态

public void feed(Animal a1,Animal a2)

参数可以传入任何Animal以及子类的对象;

public void foo(Object obj)

参数可以传入任何的对象,什么都“is-a”Object

(2)在方法的返回值类型使用多态

结合设计模式:工厂模式——降低代码的耦合度,解耦合;

public class AnimalFactory{

public static Animal getAnimal(int msg){

Animal a1 = null;

switch(msg){

case 1:  a1 = new Cat();  break;

case 2:  a1 = new Dog();  break;

case 3:  a1 = new Cat();  break;

default;

}

return a1;

}

}

使用时:

Animal a1 = AnimalFactory.getAnimal(1);

Animal a1 = AnimalFactory.getAnimal(3);

代码只和Animal和AnimalFactory有关,如果需要改变获得的产品,只需修改工厂类,降低diamante的耦合度,提高软件的可复用性、易维护性。

(3)一视同仁

Animal[] as = new Animal[5];

for(int i=0;i<as.length;i++){

as[i].eat("sd");

}

需求分析:得到《需求规格说明书》

是软件分析、设计、开发、测试、维护等重要依据

系统分析:问题空间--OOA

根据名词、动词将问题进行分类和归纳;

系统设计:解空间--OOD

软件建模,使用UML语言;(属于软件工程中内容)

UML统一建模语言,特点:使用各种图形表达设计;

(1)静态建模

1)用例图:use-case

2)类图(重点)class -dia

表示类的信息、以及类间的关系(比如继承)

(2)动态建模

1)时序图:系统功能不同步骤、按照时间顺序表示;

对象的生命周期:从创建-> 反复使用 -> 销毁

关注:使用UML工具类图,进行设计。

日常工具:纸和笔、意念;

专业工具:ration公司Rose,被IBM收购了;Sybase公司PowerDesigner,除了数据库设计,也能设计UML;

MyEclipse提供了UML插件(正版的)

需求:设计变形金刚类

BXJG类是所有变形金刚的父类,

属性:id、name、age;

构造方法:无参、有参;

业务方法;fire开火、public void fire()、show自报家门、public void show();、

具备三个子类:QingTZ、DaHF、WeiZT

作业;根据UML图,对bxjg类加以实现,并使用

创建不同子类对象

1擎天柱5000;

2大黄蜂3000

3威整天4500;

让所有变形金刚一起开火,开火前先自报家门。

Java之多态的更多相关文章

  1. 关于java中多态的理解

    java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...

  2. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  3. 个人对Java中多态的一些简单理解

    什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...

  4. Java中多态的一些简单理解

    什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...

  5. Java JVM 多态(动态绑定)

    Java JVM 多态(动态绑定) @author ixenos 摘要:绑定.动态绑定实现多态.多态的缺陷.纯继承与扩展接口.向下转型与RTTI 绑定 将一个方法的调用和一个方法的主体关联起来,称作( ...

  6. Java:多态乃幸福本源

    01 多态是什么 在我刻板的印象里,西游记里的那段孙悟空和二郎神的精彩对战就能很好的解释“多态”这个词:一个孙悟空,能七十二变:一个二郎神,也能七十二变:他们都可以变成不同的形态,但只需要悄悄地喊一声 ...

  7. 从虚拟机指令执行的角度分析JAVA中多态的实现原理

    从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...

  8. 学习博客之Java继承多态接口

    这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...

  9. C#和Java在多态情况下对成员访问的比较

    本文简单比较一下两种语言在里氏替换原则下,父类引用变量访问成员时的访问结果: 如果有两个类,如Person与Student,后者继承了前者,而且子类与父类有重名成员,当Person p = new S ...

  10. Java 之多态

    Java 之多态(包含封装) 基础知识: Java 在处理基本数据类型(例如int ,char,double)时,都是采用按值传递的方式执行,除此之外的其它类型都是按引用传递的方式执行.对象除了在函数 ...

随机推荐

  1. Python读取SQLite文件数据

    近日在做项目时,意外听说有一种SQLite的数据库,相比自己之前使用的SQL Service甚是轻便,在对数据完整性.并发性要求不高的场景下可以尝试! 1.SQLite简介: SQLite是一个进程内 ...

  2. 【NOIP2015提高组】 Day1 T3 斗地主

    [题目描述] 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4& ...

  3. LINUX 笔记-crontab命令

    用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下: minute   hour   da ...

  4. Vue 国际化 vue-i18n 用法详解

    vue-i18n 仓库地址:https://github.com/kazupon/vue-i18n 兼容性: 支持 Vue.js 2.x 以上版本 安装方法:(此处只演示 npm) npm insta ...

  5. phalcon——验证

    一个完整的使用实例:(验证模型数据) use Phalcon\Mvc\Model; use Phalcon\Mvc\Model\Validator\Email as EmailValidator; u ...

  6. LeetCode 485. Max Consecutive Ones (最长连续1)

    Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...

  7. Appium python自动化测试系列之等待函数如何进行实战(九)

    ​9.1 等待函数的使用 9.1.1 为什么要使用等待函数 我们在做自动化的时候很多时候都不是很顺利,不是因为app的问题,我们的脚本也没问题,但是很多时候都会报错,比如一个页面本来就有id为1的这个 ...

  8. [Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes+prior

    先明确一些潜规则: 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性. 机器学习大概分为三个领域: ...

  9. 用ajax的同步请求解决登陆注册需要根据服务器返回数据判断是否能提交的问题

    最近在写www.doubilaile.com的登陆注册.需要用ajax请求服务器判断用户名是否存在,用户名和密码是否匹配,进而提交数据.碰到的问题是异步请求都能成功返回数据,但是该数据不能作为紧接着的 ...

  10. Python迭代

    本篇将介绍Python的迭代,更多内容请参考:Python学习指南 简介 在Python中,如果给定一个list或者tuple,我们可以通过for循环来遍历这个list或者tuple,这种遍历我们称为 ...