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 ...
随机推荐
- Overview of iOS Crash Reporting Tools: Part 1/2
Believe it or not, developers are not perfect, and every once in a while you might have a (gasp!) bu ...
- Linux命令基本格式
1 起始符td@td-Lenovo-IdeaPad-Y410P:~$ 第一个td表示当前登录管理员名,中间@无实际意义,td-Lenovo-IdeaPad-Y410P表示主机名,-表示当前所在目录(h ...
- elasticsearch升级步骤
ES从1.2.1升级到1.4.0 升级步骤,基本上是按照官网的叙述来完成的,链接是:http://www.elasticsearch.org/guide/en/elasticsearch/refere ...
- RedHat虚拟机相关操作
在VM虚拟机中安装完Redhat系统之后 如果需要用secureCRT连接linux系统的话 操作步骤如下: 1.进入linux系统,在终端输入ifconfig(注意,不是windows的ipconf ...
- 配置php扩展memcache
配置php扩展memcache 环境说明: 系统版本 CentOS 6.9 x86_64 软件版本 nginx-1.12.2 php-5.5.38 ...
- 向git库提交代码出现”There are no staged files"怎么办?
1.选择菜单“Window”->"Preference" 2.左边树菜单选择“Team”->"Git"->"Committing&q ...
- android中非堵塞socket通信
1.什么是同步与异步,堵塞与非堵塞 首先我们要明确搞明确:同步就等于堵塞?异步就等于非堵塞?这是不正确的,同步不等于阻 塞.而异步也不等于非堵塞. 1)那什么是同步编程? 什么是同步,就是在发出一个功 ...
- springboot缓存及连接池配置
参见https://coding.imooc.com/lesson/117.html#mid=6412 1.springboot的springweb自己默认以及配置好了缓存,只需要在主文件(XxxAp ...
- Javascript中的回调函数和匿名函数的回调
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- IIS7 经典模式和集成模式的区别分析
IIS7.0中的Web应用程序有两种配置模式:经典模式和集成模式.两者区别大家可以参考下,根据实际情况选用. 经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于I ...