Java之多态
一、多态
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之多态的更多相关文章
- 关于java中多态的理解
java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...
- 深入Java核心 Java中多态的实现机制(1)
在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...
- 个人对Java中多态的一些简单理解
什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...
- Java中多态的一些简单理解
什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...
- Java JVM 多态(动态绑定)
Java JVM 多态(动态绑定) @author ixenos 摘要:绑定.动态绑定实现多态.多态的缺陷.纯继承与扩展接口.向下转型与RTTI 绑定 将一个方法的调用和一个方法的主体关联起来,称作( ...
- Java:多态乃幸福本源
01 多态是什么 在我刻板的印象里,西游记里的那段孙悟空和二郎神的精彩对战就能很好的解释“多态”这个词:一个孙悟空,能七十二变:一个二郎神,也能七十二变:他们都可以变成不同的形态,但只需要悄悄地喊一声 ...
- 从虚拟机指令执行的角度分析JAVA中多态的实现原理
从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...
- 学习博客之Java继承多态接口
这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...
- C#和Java在多态情况下对成员访问的比较
本文简单比较一下两种语言在里氏替换原则下,父类引用变量访问成员时的访问结果: 如果有两个类,如Person与Student,后者继承了前者,而且子类与父类有重名成员,当Person p = new S ...
- Java 之多态
Java 之多态(包含封装) 基础知识: Java 在处理基本数据类型(例如int ,char,double)时,都是采用按值传递的方式执行,除此之外的其它类型都是按引用传递的方式执行.对象除了在函数 ...
随机推荐
- Linux 快捷键汇总(偏基础)
自己最近才搭上Linux末班车,有一种想见恨晚的感觉,完全给你一种快速清爽的感觉! 因为需要,所以学习,记录自己在使用Linux系统上的点滴,偏基础! 1. 打开终端: Ctrl+Alt+T 2. 复 ...
- .Net Web开发技术栈
有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...
- swift 之 namespace
场景: 项目中类名过长,造成不能根据文件名区分出来,并且如果一个模块的类较多时,很难取一个比较优雅的名字.为了使模块名可读, 我们一般的做法就是添加模块前缀.但是如果模块中还有个子模块,如果还继续按 ...
- Java基础笔记13
1.集合与对象数组的区别 集合与对象数组共同点:都是存放对象的容器: 区别在于:①集合是没有长度限制的:②集合容器中没有类型的限制. 2.集合(都在Java.util包下) 常用的集合:Collect ...
- Codeforces Round #383 (Div. 2)C. Arpa's loud Owf and Mehrdad's evil plan
C. Arpa's loud Owf and Mehrdad's evil plan time limit per test 1 second memory limit per test 256 me ...
- 2016 ICPC总结
2016 ICPC总结 九月份开学,开始知识点的补充,刚开始的几周都在刷acmsteps,十月开始进行专题性的学习,首先进行的数据结构,给自己定的计划,十一月前看完数据结构,刚开始的时候看的都是以前的 ...
- 使用PostgreSQL进行全文检索
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
- 使用jquery ajaxForm提交表单
一.首先引用Jquery <script src="~/Scripts/jquery-1.9.1.min.js"></script> <script ...
- WPF学习之路一
前段时间一直在学习MVC,工作需要,现在需要180度急转弯,搞WPF,MVVM,只能找资料学习了. WPF中有一个消息机制,就是当前台控件绑定的值改变时,会自动通知到指定的事件来改变VM的值,反之亦然 ...
- 浅谈Android中的组播(多播)
组播使用UDP对一定范围内的地址发送相同的一组Packet,即一次可以向多个接受者发出信息,其与单播的主要区别是地址的形式.IP协议分配了一定范围的地址空间给多播(多播只能使用这个范围内的IP),IP ...