- 浏览: 81160 次
- 性别:
文章分类
最新评论
-
lovewendy:
...
Android绘制折线图 -
qiao522600806:
myf408 写道我运行了,怎么报错啊,报错如下:04-24 ...
Android绘制折线图 -
qiao522600806:
看看
Android绘制折线图 -
king_tt:
垃圾。运行不了,报错。
Android绘制折线图 -
贾叔叔:
很好用,感谢楼主分享。7楼不知道遇到的什么问题,把他弄得这么生 ...
Android绘制折线图
多态:所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口与实现的类之间强制类型转换方式与父和子之间的强完全一样。
代码:源于张龙老师的视频
关于多态学习的代码:
Animal.java
package cn.sisy.polymorphism; public class Animal { public void sing(){ System.out.println("Animal is singing"); } public String name = "小动物"; }
Cat.java
package cn.sisy.polymorphism; public class Cat extends Animal{ public void sing(){ System.out.println("Cat is singing"); } }
PolyTest02:主要说明向上类型转换和向下类型转换,向上转型不需显示指定,向下转型必须强制转换。
package cn.sisy.polymorphism; public class PolyTest02 { public static void main(String[] args) { //向上类型转换---子类转换为父类 Cat cat = new Cat(); Animal animal = cat; cat.sing(); //向下类型转换---父类转换为子类 //必须使用强制类型转换 Animal a = new Cat(); Cat c1 = (Cat) a; c1.sing(); //以下的转换可以吗? // cn.sisy.base.Animal cannot be cast to cn.sisy.base.Cat Animal b = new Animal(); Cat c2 = (Cat)b; } }
程序运行结果 :
Cat is singing
Cat is singing
Exception in thread "main" java.lang.ClassCastException: cn.sisy.polymorphism.Animal cannot be cast to cn.sisy.polymorphism.Cat
at cn.sisy.polymorphism.PolyTest02.main(PolyTest02.java:17)
------------------------------------------------------------------------------
下面我们为Cat方法增加一些自己的方法和属性
Cat.java
package cn.sisy.polymorphism; public class Cat extends Animal{ public void sing(){ System.out.println("Cat is singing"); } public void voice(){ System.out.println("喵喵~~"); } public String name = "小花猫"; }
PolyTest03.java
package cn.sisy.polymorphism; public class PolyTest03 { public static void main(String[] args) { Animal animal = new Cat(); //以下的语句编译不能通过,因为Animal类中并没有定义voice方法 //animal.voice(); System.out.println(animal.name); //为了调用子类特有的方法,有时候需要进行强制类型转换 Cat cat = (Cat)animal; cat.voice(); System.out.println(cat.name); } }
程序的运行结果:
小动物
喵喵~~
小花猫
以上的结果没有体现出属性的多态;为了调用子类特有的方法,需要进行强制类型转换 。
-------------------------------------------------------------------------
PolyTest4.java 这个例子为了说明多态是一种运行时的行为
package cn.sisy.polymorphism; /* * 此类为了说明Java的多态是一种运行时的行为 * 因为运行之前a根本不知道将会指向哪种引用, * 这种情况也称为dynamically bound */ public class PolyTest4{ public static void main(String[] args){ A a = null; if(args[0].equals("1")){ a = new B(); } else if(args[0].equals("2")){ a = new C(); } else if(args[0].equals("3")){ a = new D(); } a.method(); } } class A{ public void method(){ System.out.println("A"); } } class B extends A{ public void method(){ System.out.println("B"); } } class C extends A{ public void method(){ System.out.println("C"); } } class D extends A{ public void method(){ System.out.println("D"); } }
用 java PolyTest4 2执行程序时将会输出:
C
----------------------------------------------------------------------------------
以下的程序说明了多态在实际开发中应该如何应用:
class Car{ public void run(){ System.out.println("car is running"); } } class BMW extends Car{ public void run(){ System.out.println("BMW is running"); } } class QQ extends Car{ public void run(){ System.out.println("QQ is running"); } }
public class PolyTest5{ public void run(BMW bmw) { bmw.run(); } public void run(QQ qq) { qq.run(); } public static void main(String[] args){ PolyTest5 test = new PolyTest5(); BMW bmw = new BMW(); test.run(bmw); QQ qq = new QQ(); test.run(qq); } }
通过以上的程序我们会发现,如何我们把实际存在的车型都写出来,那么PolyTest5.java这个程序将会十分拥挤,那我们是不是可以用已经学到的多态的知识加以改进呢?请看下面的程序。
public class PolyTest5{ public void run(Car car){ car.run(); } public static void main(String[] args){ PolyTest5 test = new PolyTest5(); Car car = new BMW(); test.run(car); QQ qq = new QQ(); test.run(qq);//此处应用了自动向上转型,所以子类对象都是父类对象 } }
上面的程序是不是改进很多呢。。。只需一个方法。。。。
发表评论
-
Java网络编程-More
2012-10-13 14:34 709代码来源:《疯狂Java讲义》 ... -
网络编程
2012-10-13 13:59 723------------------------------ ... -
Java 剪贴板程序
2012-10-01 19:12 1320hoverlees 写道 众所周知,这个包主要是与系统剪切板 ... -
ImageIO读取位图显示在Frame中
2012-10-01 09:14 826package cn.sisy.awt; import ja ... -
Java的Image抽象类与BufferedImage实现类
2012-10-01 01:03 2125代码一串&&执行流程 package c ... -
Java中三个与绘图有关的方法
2012-09-30 19:12 1435Component 类下的三个与绘 ... -
==以及equals的学习
2012-09-29 23:02 0相等性的比较(==) 1) 对于原生数据类型来说,比较的是 ... -
Java中的access modifier及instanceof运算符
2012-09-30 10:40 788访问修饰符(access modifier) 1) pub ... -
static其它
2012-09-29 19:39 6251. static代码块:静态代码块。 静态代码块的作用也是 ... -
final关键字
2012-09-29 19:32 625final关键字可以修饰属性、方法、类。 final ... -
Static关键字
2012-09-29 12:10 853风中叶 写道 static修饰属性:无论一个类生成了多少个对 ... -
Java构造器及几个基本概念
2012-09-29 11:58 988关于构造器 carey-pro 写道 1)jav ... -
流程控制---读书笔记
2012-09-29 11:40 657顺序:从上之下,无判 ... -
抽象类与接口
2012-09-28 18:03 696抽象类视频学习代码记录: 首先定义一个抽象类及两个实现类 ... -
继承与重写
2012-09-28 11:33 609重写其实是继承的范畴内的一个概念, 为了说明这两个概念,我们 ... -
关于java变量的几个概念
2012-08-10 11:32 696成员变量:指类范围内 ... -
Java中如何使用数组?
2012-08-10 09:16 684一:定义一个数组 type[] arrayName; 二: ... -
Java抽象类、接口简单小结
2012-01-05 15:02 807一、抽象类 package cn.oo; public ... -
finally里的语句一定会执行吗?
2011-12-11 16:06 3533前几天去面试,其中有两道面试题。如下 一:finall ... -
String与==
2011-10-18 21:19 0public class TestString{ publ ...
相关推荐
java多态、继承练习题,包含题目与答案,............................................................................................................
代码演示对java中多态的理解 从代码演示中更好的理解多态的作用
Java多态的讲解
java的多态,是一个很重要的环节.但是要知道什么是多态!
深入Java核心 Java中多态的实现机制
java多态实现的课件,给那些需要的人 讲述了java多态的概念、分类、实现 综合案例讲解、总结多态的作用
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
JAVA多态思维导图,便捷整理思路,多态的好处、多态的语法格式、多态中的两种类型转换:向上转型、向下转型
Java继承与多态专题讲解,详细生动,例子丰富,适合初学者
北大青鸟javaOOP多态Ch03作业全集.rar
Java基础多态PPT教学课件.pptx
利用大量代码讲解java的多态,让你更容易理解和应用。
Java开发之多态的具体应用,包含多态应用的实例和相应实例的代码。
Java的多态是学习Java的第一个重点,也是一个难点。在学习Java多态之前, 要学好封装和继承,封装和继承是理解多态的一个过程。在表现多态时,同 时也体现了封装和继承。
java教学视频,讲解了多态的扩展性、转型、成员特点、主板实例、object类等
java 继承和多态PPT教程
java多态的基础知识,你可能了解,但是如何使用?内附例子。究竟如何实现,帮你学习基础。
Java 继承 多态方面的实例源码,内容方面涉及对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏等。。。
JAVA多态图文详解ppt,详细通过各种举例介绍JAVA多态的ppt
java封装 继承与多态 程序设计 类与对象