- 浏览: 84095 次
- 性别:
文章分类
最新评论
-
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 760代码来源:《疯狂Java讲义》 ... -
网络编程
2012-10-13 13:59 759------------------------------ ... -
Java 剪贴板程序
2012-10-01 19:12 1368hoverlees 写道 众所周知,这个包主要是与系统剪切板 ... -
ImageIO读取位图显示在Frame中
2012-10-01 09:14 875package cn.sisy.awt; import ja ... -
Java的Image抽象类与BufferedImage实现类
2012-10-01 01:03 2187代码一串&&执行流程 package c ... -
Java中三个与绘图有关的方法
2012-09-30 19:12 1542Component 类下的三个与绘 ... -
==以及equals的学习
2012-09-29 23:02 0相等性的比较(==) 1) 对于原生数据类型来说,比较的是 ... -
Java中的access modifier及instanceof运算符
2012-09-30 10:40 841访问修饰符(access modifier) 1) pub ... -
static其它
2012-09-29 19:39 6661. static代码块:静态代码块。 静态代码块的作用也是 ... -
final关键字
2012-09-29 19:32 665final关键字可以修饰属性、方法、类。 final ... -
Static关键字
2012-09-29 12:10 896风中叶 写道 static修饰属性:无论一个类生成了多少个对 ... -
Java构造器及几个基本概念
2012-09-29 11:58 1032关于构造器 carey-pro 写道 1)jav ... -
流程控制---读书笔记
2012-09-29 11:40 697顺序:从上之下,无判 ... -
抽象类与接口
2012-09-28 18:03 740抽象类视频学习代码记录: 首先定义一个抽象类及两个实现类 ... -
继承与重写
2012-09-28 11:33 655重写其实是继承的范畴内的一个概念, 为了说明这两个概念,我们 ... -
关于java变量的几个概念
2012-08-10 11:32 736成员变量:指类范围内 ... -
Java中如何使用数组?
2012-08-10 09:16 723一:定义一个数组 type[] arrayName; 二: ... -
Java抽象类、接口简单小结
2012-01-05 15:02 863一、抽象类 package cn.oo; public ... -
finally里的语句一定会执行吗?
2011-12-11 16:06 3575前几天去面试,其中有两道面试题。如下 一:finall ... -
String与==
2011-10-18 21:19 0public class TestString{ publ ...
相关推荐
"北大青鸟javaOOP多态Ch03作业全集.rar"这个压缩包文件很显然是针对学习者提供的一系列关于Java多态性的练习和案例,帮助学生深入理解并掌握这一核心技能。 多态性是面向对象三大特性之一,另外两个是封装和继承。...
3. **本地方法栈**:与虚拟机栈类似,但它是为执行Java Native Interface (JNI) 方法而设计的。 4. **堆**:所有类实例和数组都在堆中创建。由于堆是所有线程共享的,所以对象的分配和垃圾回收都在这里进行。 5. *...
java多态、继承练习题,包含题目与答案,............................................................................................................
Java多态的讲解
java多态实现的课件,给那些需要的人 讲述了java多态的概念、分类、实现 综合案例讲解、总结多态的作用
对 Java 中多态理解 Java 中的多态是指在不同的情况下可以有不同的行为,多态是面向对象编程的一种基本特征。多态的实现是通过方法重载和方法重写来实现的。 在 Java 中,多态可以分为两种:编译时多态和运行时...
在Java中,多态分为编译时多态和运行时多态。编译时多态主要体现在方法的重载(Overloading),即在同一个类中可以有多个同名方法,但参数列表不同。编译器会根据传入参数的类型和数量来决定调用哪个方法。运行时...
### 深入Java核心:Java中多态的实现机制 多态性是面向对象编程中的一个重要概念,它使得程序代码具有高度的灵活性和可扩展性。本文将围绕Java中的多态实现机制展开讨论,包括多态的基本概念、实现原理以及具体的...
JAVA多态思维导图,便捷整理思路,多态的好处、多态的语法格式、多态中的两种类型转换:向上转型、向下转型
### Java多态经典讲解 #### 一、理解Java多态 多态,作为面向对象编程的三大特性之一,是继抽象和继承之后的关键概念。它允许我们以统一的接口处理不同类型的对象,增强了代码的灵活性和可扩展性。在Java中,多态...
### Java继承与多态知识点详解 #### 一、引言 在面向对象编程语言中,继承和多态是非常重要的概念。它们提供了强大的机制来管理代码的复杂性,并且能够有效地复用现有代码。本文将详细介绍Java中的继承和多态概念...
Java基础多态PPT教学课件.pptx
Java的多态是学习Java的第一个重点,也是一个难点。在学习Java多态之前, 要学好封装和继承,封装和继承是理解多态的一个过程。在表现多态时,同 时也体现了封装和继承。
java教学视频,讲解了多态的扩展性、转型、成员特点、主板实例、object类等
Java 语言程序设计第 5 章接口多态 本章主要讲解 Java 语言程序设计中接口和多态的概念、语法和应用。接口是 Java 语言中的一种抽象机制,它提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除...
java 继承和多态PPT教程
此外,Java的接口也是实现多态的一种方式。接口是一种完全抽象的类型,它只包含抽象方法和常量。一个类可以实现多个接口,从而获得多重身份,进一步增强多态性。例如,我们可以定义一个`Runnable`接口: ```java ...
Java 多态详解 Java 多态是 Java 编程语言中的一种基本概念,它允许开发者定义一个接口,并且可以通过不同的类来实现该接口。多态性是 Java 面向对象编程的核心机制之一,它使得程序更加灵活、可维护和可扩展。 ...
- **消除类型之间的耦合关系**:多态使得类与类之间解耦,降低了模块间的依赖。 - **可替换性**:子类对象可以在任何需要父类对象的地方使用,提高了代码的灵活性。 - **可扩充性**:增加新的子类不会影响到现有代码...
Java 继承 多态方面的实例源码,内容方面涉及对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏等。。。