Java多态案例分析
一、多态的定义
同一事物,在不同时刻体现出不同状态。
例如:水在不同状态可能是:气态、液态、固态。
二、多态前提和体现
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多态案例分析的更多相关文章
- Java虚拟机类加载机制——案例分析
转载: Java虚拟机类加载机制--案例分析 在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...
- Java内存泄漏分析系列之五:常见的Thread Dump日志案例分析
原文地址:http://www.javatang.com 症状及解决方案 下面列出几种常见的症状即对应的解决方案: CPU占用率很高,响应很慢 按照<Java内存泄漏分析系列之一:使用jstac ...
- 《深入理解Java虚拟机》-----第5章 jvm调优案例分析与实战
案例分析 高性能硬件上的程序部署策略 例 如 ,一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU.16GB物理内存,操作系统为64位CentOS 5.4 , Resin ...
- Java多态面试题案例几解题思路
---恢复内容开始--- Java多态面试题案例几解题思路 这道题是来自别人,先开始看到题很懵,后来有自己的思路: class A { public String show(D obj){ retur ...
- java代码实现highchart与数据库数据结合完整案例分析(二)---折线图
作者原创:未经博主允许不许转载 在上一篇的博客中,展示和分析了如何做一个饼状图,有疑问可以参考上一篇博客. 现在分析和展示折线图的绘制和案例分析, 先展示效果图: 与饼状图不同的是,折线图展现更多的数 ...
- Java 实验案例(多态)
实验任务 任务一:图形面积周长计算小程序 任务二:饲养员喂养动物程序 实验内容: 任务一: 图形面积周长计算 任务目的: 掌握多态的含义及应用场合 掌握上转型对象和多态的实现 掌握abstract关键 ...
- Java设计模式—门面模式(带案例分析)
1.门面模式的定义: 门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式,其定义如下: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式 ...
- java 并发基础,及案例分析
对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了,然而并发问题是令我们大多数程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们深入研 ...
- Java多线程——线程八锁案例分析
Java多线程——线程八锁案例分析 摘要:本文主要学习了多线程并发中的一些案例. 部分内容来自以下博客: https://blog.csdn.net/dyt443733328/article/deta ...
随机推荐
- SQL 存储过程(转帖摘录)
篇一: 创建存储过程 Create Proc dbo.存储过程名 存储过程参数 AS 执行语句 RETURN 执行存储过程 GO *********** ...
- 线性判别分析(Linear Discriminant Analysis, LDA)算法初识
LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discrimin ...
- json字符串与java对象互转
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- Java中hashcode的理解
Java中hashcode的理解 原文链接http://blog.csdn.net/chinayuan/article/details/3345559 怎样理解hashCode的作用: 以 java. ...
- ASP.NET MVC学习---(二)EF文件结构
之前已经简单的介绍过ORM框架和EF 也了解了EF的种种优点 那么这个EF到底长啥样子都还没见过呢 别着急 接下来,科学教育频道--走近科学 带你走进EF的内心世界~ 那么接下来就是~ 等等等等... ...
- Docker以及registry的入门学习安装
一.前言 如果你是数据中心或云计算IT圈子的人,我想你一定听过Docker,关于它们的新闻从未间断过.Docker的发展历程虽然算不上太长,但是自2014年6月Docker 1.0 正式发布,但是Do ...
- http header 具体解释
HTTP(HyperTextTransferProtocol)即超文本传输协议,眼下网页传输的的通用协议. HTTP协议採用了请求/响应模型,浏览器或其它client发出请求,server给与响应. ...
- 容量测试之tcpcopy引流模式
tcpcopy 给用户提供了很多命令参数来修改引流的模式和设置,详细可以查阅手册.在这里把几种常见的引流方式做个归纳小结,以tcpcopy传统架构使用命令举例. 1.分布式引流 用法:Tcpcopy可 ...
- Elasticsearch Java API深入详解
0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...
- LeetCode题目:Best Time to Buy and Sell Stock
原题地址:https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ 解决方法:动态规划,minimun存储的是当前价格中最小的. c ...