一、多态的定义

同一事物,在不同时刻体现出不同状态。

例如:水在不同状态可能是:气态、液态、固态。

二、多态前提和体现

1、有继承关系

2、有方法重写

3、有父类引用指向子类对象

三、编译运行原理

1、编译看左边,父类是否有此方法,没有就报错。

2、运行看右边,运行结果一般是右边子类重写后的结果。

四、案例分析

 package polymorphic;
/**
* 多态案例1,基础
* @author zhongfg
* @date 2015-06-16
*/
interface Car { public abstract String getName(); public abstract int getPrice();
} class Benz implements Car { @Override
public String getName() {
// TODO Auto-generated method stub
return "BENZ";
} @Override
public int getPrice() {
// TODO Auto-generated method stub
return 300000;
} } class Bmw implements Car { @Override
public String getName() {
// TODO Auto-generated method stub
return "BMW";
} @Override
public int getPrice() {
// TODO Auto-generated method stub
return 250000;
} } class CarShop { public void carInfo(Car car){
System.out.println("品牌:"+car.getName()+",价格:"+car.getPrice());
}
} public class PolymorphicDemo {
public static void main(String[] args) { CarShop cs = new CarShop();
//传递的是Benz的对象
Car car = new Benz();
cs.carInfo(car); //传递的是Bmw的对象
car = new Bmw();
cs.carInfo(car);
}
} 运行结果:
品牌:BENZ,价格:300000
品牌:BMW,价格:250000
 package polymorphic;
/**
* 多态案例2,转型问题
* @author zhongfg
* @date 2015-06-16
*/
abstract class Animal { public abstract void eat();
} class Dog extends Animal { public void eat(){
System.out.println("狗吃肉");
} public void lookDoor(){
System.out.println("狗看门");
}
} class Cat extends Animal { public void eat() {
System.out.println("猫吃鱼");
} public void playGram() {
System.out.println("猫玩游戏");
}
} public class PolymorphicTest { public static void main(String[] args) {
//内存中是狗,向上转型
Animal a = new Dog();
a.eat();
//向下转型
Dog d = (Dog)a;
d.lookDoor(); System.out.println("------------------"); //内存中是猫,向上转型
a = new Cat();
a.eat();
//向下转型
Cat c = (Cat)a;
c.playGram(); //java.lang.ClassCastException,内存中的猫不能转换成狗
// Dog d2 = (Dog)a;
}
} 运行结果:
狗吃肉
狗看门
------------------
猫吃鱼
猫玩游戏

Java多态案例分析的更多相关文章

  1. Java虚拟机类加载机制——案例分析

    转载: Java虚拟机类加载机制--案例分析   在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...

  2. Java内存泄漏分析系列之五:常见的Thread Dump日志案例分析

    原文地址:http://www.javatang.com 症状及解决方案 下面列出几种常见的症状即对应的解决方案: CPU占用率很高,响应很慢 按照<Java内存泄漏分析系列之一:使用jstac ...

  3. 《深入理解Java虚拟机》-----第5章 jvm调优案例分析与实战

    案例分析 高性能硬件上的程序部署策略 例 如 ,一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU.16GB物理内存,操作系统为64位CentOS 5.4 , Resin ...

  4. Java多态面试题案例几解题思路

    ---恢复内容开始--- Java多态面试题案例几解题思路 这道题是来自别人,先开始看到题很懵,后来有自己的思路: class A { public String show(D obj){ retur ...

  5. java代码实现highchart与数据库数据结合完整案例分析(二)---折线图

    作者原创:未经博主允许不许转载 在上一篇的博客中,展示和分析了如何做一个饼状图,有疑问可以参考上一篇博客. 现在分析和展示折线图的绘制和案例分析, 先展示效果图: 与饼状图不同的是,折线图展现更多的数 ...

  6. Java 实验案例(多态)

    实验任务 任务一:图形面积周长计算小程序 任务二:饲养员喂养动物程序 实验内容: 任务一: 图形面积周长计算 任务目的: 掌握多态的含义及应用场合 掌握上转型对象和多态的实现 掌握abstract关键 ...

  7. Java设计模式—门面模式(带案例分析)

    1.门面模式的定义: 门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式,其定义如下:       要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式 ...

  8. java 并发基础,及案例分析

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了,然而并发问题是令我们大多数程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们深入研 ...

  9. Java多线程——线程八锁案例分析

    Java多线程——线程八锁案例分析 摘要:本文主要学习了多线程并发中的一些案例. 部分内容来自以下博客: https://blog.csdn.net/dyt443733328/article/deta ...

随机推荐

  1. 如何在AutoCAD中将卫星底图变为有坐标参考信息的

    这篇博文首先没有图,主要是博主太懒了,不想再截图,我把过程说清楚也可以的.特此说明. (1)将下载好的瓦片拼接好大的地图 (2)将其导入到ArcGIS中,定义其地理坐标,如WGS84:然后将其其投影为 ...

  2. ARP/RARP

    IP地址和MAC地址之间的转换   点对点链路不使用ARP   ARP高速缓存   ARP高效运行的关键是每个主机上都有一个ARP高速缓存. 存放了最近IP地址与MAC地址间的映射关系. 每一项生存时 ...

  3. ubuntu16 安装cron 以及使用

    https://www.cnblogs.com/intval/p/5763929.html sudo apt-get install cron 启动cron sudo service cron sta ...

  4. 资深程序员教你如何实现API自动化测试平台!附项目源码!

    原文链接: 1.平时测试接口,总是现写代码,对测试用例的管理,以及测试报告的管理持久化做的不够, 2.工作中移动端开发和后端开发总是不能并行进行,需要一个mock的依赖来让他们并行开发. 3.同时让自 ...

  5. 关于ng-router嵌套使用和总结

    那是某个下午的review代码的过程.js中有一段html,像是这样. var html = '<div>...此处还有很多html代码....</div>' 我的同事想我提出 ...

  6. JavaScript历史状态管理

    1.API (1)history.pushState:能够在不加载新页面的情况下改变浏览器的 URL history.pushState({name:"Nicholas"}, &q ...

  7. GMGC记实(上篇)

    24日和25日參加了2014年GMGC大会,整体感觉今年的大会比前2届大会办的更符合听众的需求.由于今年的大会开设了开发人员训练营的分会场.在成都这样一个CP占主流的IT圈中非常有意义.另一点就是在会 ...

  8. 如何修改myeclipse中web项目的工作路径或默认路径

    如何修改myeclipse中web项目的工作路径或默认路径 博客分类: J2EE开发技术指南   安装好myeclipse后,第一次启动myeclipse时,都会弹出会弹出Workspace Laun ...

  9. ios 使用gcd 显示倒计时

    __block ;//倒计时时间 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ...

  10. MQTT--入门

    一.简述  MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议 ...