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 ...
随机推荐
- 设计模式之迭代器模式(PHP实现)
github地址:https://github.com/ZQCard/design_pattern/** * 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常 ...
- php设计模式之建造者模式
建造者模式 建造者设计模式的目的是消除其他对象的复杂创建过程.使用建造者设计模式不仅是最佳的做法,而且在摸个对象的构造和配置方法改变时候,可以尽可能的减少重复更改代码. <?php /** *p ...
- 使apache的日志文件里不记录图片文件
找到: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-A ...
- 安装Webmin1.860(RPM方式)
Webmin是基于web的功能强大的管理工具,管理员可以通过Webmin以图文方式方便的管理CentOS 7系统.本文介绍如何在CentOS 7中安装Webmin. 1.去官网获取最新的RPM链接 2 ...
- 利用yarn多队列实现hadoop资源隔离
大数据处理离不开hadoop集群的部署和管理,对于本来硬件资源就不多的创业团队来说,做好资源的共享和隔离是很有必要的,毕竟不像BAT那么豪,那么怎么样能把有限的节点同时分享给多组用户使用而且互不影响呢 ...
- css 文字超出省略号
white-space:nowrap; overflow:hidden; -o-text-overflow:ellipsis; text-overflow:ellipsis; 语法: text-ove ...
- USE [EPPM] [dbo].[REFRDEL_CLEANUP]
USE [EPPM] GO /****** Object: StoredProcedure [dbo].[REFRDEL_CLEANUP] Script Date: 2016/4/2 16:32:29 ...
- iOS_新版iOS11 UITbleView适配的一些问题及解决方法
// tableView 偏移20/64适配 if (@available(iOS 11.0, *)) { self.tableView.contentInsetAdjustmentBehavior ...
- 设置快速的debian源的方法:
1)设置临时源 vi /etc/apt/sources.list #添加以下一行到文件最后 deb http://http.us.debian.org/debian stable main 2)更新软 ...
- Mysql和SqlServer互相转换
环境: Windows XP sp2 MS SQL Server 2OOO sp1 MySql 5.0.41 1:MSSQLServer数据库导入到MySql数据库 步骤: 1.安装mysql数据库的 ...