Java多态案例分析

一、多态的定义

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

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

二、多态前提和体现

1、有继承关系

2、有方法重写

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

三、编译运行原理

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

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

四、案例分析

 1 package polymorphic;
 2 /**
 3  * 多态案例1,基础
 4  * @author zhongfg
 5  * @date 2015-06-16
 6  */
 7 interface Car {
 8
 9     public abstract String getName();
10
11     public abstract int getPrice();
12 }
13
14 class Benz implements Car {
15
16     @Override
17     public String getName() {
18         // TODO Auto-generated method stub
19         return "BENZ";
20     }
21
22     @Override
23     public int getPrice() {
24         // TODO Auto-generated method stub
25         return 300000;
26     }
27
28 }
29
30 class Bmw implements Car {
31
32     @Override
33     public String getName() {
34         // TODO Auto-generated method stub
35         return "BMW";
36     }
37
38     @Override
39     public int getPrice() {
40         // TODO Auto-generated method stub
41         return 250000;
42     }
43
44 }
45
46 class CarShop {
47
48     public void carInfo(Car car){
49         System.out.println("品牌:"+car.getName()+",价格:"+car.getPrice());
50     }
51 }
52
53 public class PolymorphicDemo {
54     public static void main(String[] args) {
55
56         CarShop cs = new CarShop();
57         //传递的是Benz的对象
58         Car car = new Benz();
59         cs.carInfo(car);
60
61         //传递的是Bmw的对象
62         car = new Bmw();
63         cs.carInfo(car);
64
65         /**
66          * 运行结果:
67          * 品牌:BENZ,价格:300000
68          * 品牌:BMW,价格:250000
69          */
70     }
71 }

 1 package polymorphic;
 2 /**
 3  * 多态案例2,转型问题
 4  * @author zhongfg
 5  * @date 2015-06-16
 6  */
 7 abstract class Animal {
 8
 9     public abstract void eat();
10 }
11
12 class Dog extends Animal {
13
14     public void eat(){
15         System.out.println("狗吃肉");
16     }
17
18     public void lookDoor(){
19         System.out.println("狗看门");
20     }
21 }
22
23 class Cat extends Animal {
24
25     public void eat() {
26         System.out.println("猫吃鱼");
27     }
28
29     public void playGram() {
30         System.out.println("猫玩游戏");
31     }
32 }
33
34 public class PolymorphicTest {
35
36     public static void main(String[] args) {
37         //内存中是狗,向上转型
38         Animal a = new Dog();
39         a.eat();
40         //向下转型
41         Dog d = (Dog)a;
42         d.lookDoor();
43
44         System.out.println("------------------");
45
46         //内存中是猫,向上转型
47         a = new Cat();
48         a.eat();
49         //向下转型
50         Cat c = (Cat)a;
51         c.playGram();
52
53         //java.lang.ClassCastException,内存中的猫不能转换成狗
54 //        Dog d2 = (Dog)a;
55
56         /**
57          * 运行结果:
58          * 狗吃肉
59          * 狗看门
60          * ------------------
61          * 猫吃鱼
62          * 猫玩游戏
63          */
64     }
65 }

时间: 2024-08-29 05:30:39

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

java死锁性能分析

java故障诊断案例分析: 死锁瓶颈(性能分析) 只要是java程序, 都可以使用这种方式来分析性能的瓶颈 1. Dump信息查看 Thread dump信息对于性能诊断非常有用 kill 命令使用 kill : 杀死一个进程 ? -9: 强制杀死一个进程 ? -3: 打印进程的Thread dump信息 linux系统: kill -3 pid windows: 在命令行窗口上, 按一个组合键: ctrl + break(fn+B键) 2. 死锁程序分析 java的一个死锁程序代码: publ

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

作者原创:未经博主允许不许转载 在上一篇的博客中,展示和分析了如何做一个饼状图,有疑问可以参考上一篇博客. 现在分析和展示折线图的绘制和案例分析, 先展示效果图: 与饼状图不同的是,折线图展现更多的数据,也会体现出更多的自动性. 先展示一下js代码: <!-- 播放类型统计折线图 --> <script type="text/javascript"> $(function () { var livFlowList=document.getElementById(

JAVA读书推荐----《深入分析Java Web技术内幕》--《java多线程编程核心技术》--《大型网站技术架构 核心原理与案例分析》-《Effective Java中文版》

(1)  首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life. 目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客.这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 1.随便开篇点明该设计模式的定义 2.图文并茂讲解该设计模式中的结构 3.以详细的代码形式写一下该种设计模式的实现 4.补充内容 5.讲解该设计模式的优缺点 对于一个设计模式我们关

大型网站技术架构-核心原理与案例分析-阅读笔记4

在第四章案例章节中的淘宝网的架构演化案例分析小节中作者主要分析了淘宝架构的演化,以淘宝网的实例给我们分析介绍了淘宝网的业务发展历程及淘宝网的技术架构演化两个方面,在业务发展中作者写到淘宝的技术是随着淘宝业务一起发展起来的,业务是推动这技术发展的动力,淘宝如今的规模和当初有很明显的变化,在技术架构演化中介绍了架构技术的更新升级,该章节中主要介绍淘宝网的发展的历程,在随着时间的发展不断中网站的架构不断的引用着新的技术,由最初简单的c2c更改过来的网站,放弃了lamp架构转而使用java作为开发平台并

Java Annotation原理分析(一)

转自:http://blog.csdn.net/blueheart20/article/details/18725801 小引: 在当下的Java语言层面上,Annotation已经被应用到了语言的各个方面,它已经在现在的ssh开发中,通过Annotation极大的提高了开发的效率,堪称开发神器.在这篇文章中,我们来了解一下的Annotation在Java中的前身今世吧. 1.   Java Annotation因何而来? 最初从印象中,是可以替代之前JDK1.4开发中,大量繁琐的配置项,Ann

(版本定制)第5课:基于案例分析Spark Streaming流计算框架的运行源码

本期内容: 1.在线动态计算分类最热门商品案例回顾与演示 2.基于案例分析Spark Streaming的运行源码 第一部分案例: package com.dt.spark.sparkstreaming import com.robinspark.utils.ConnectionPoolimport org.apache.spark.SparkConfimport org.apache.spark.sql.Rowimport org.apache.spark.sql.hive.HiveConte

161920、使用Spring AOP实现MySQL数据库读写分离案例分析

一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量. 在进行数据库读写分离的时候,我们首先要进行数据库的主从配置,最简单的是一台Master和一台Slave(大型网站系统的话,当然会很复杂,这里只是分析了最简单的情况).通过主从配置主从数据库保持了相同的数据,我们在进行读操作的时候访问从数据库Slave,在进行写操作的时候访问主数据库Master.这样的话就减轻了一台服务器的压力. 在进行读写分离案

性能分析之-- JAVA Thread Dump 分析综述

性能分析之-- JAVA Thread Dump 分析综述 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工具.每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数. 1.2 T

Java反序列化漏洞分析

相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 http://www.tuicool.com/articles/ZvMbIne http://www.freebuf.com/vuls/86566.html http://sec.chinabyte.com/435/13618435.shtml http://www.myhack58.com/Articl