其实也就是两种绑定状态:动态绑定(也称后期绑定),静态绑定(也称前期绑定).
1 实例方法: 实例方法与引用所实际引用的对象绑定.(动态绑定).
2 静态方法: 静态方法与引用所实际声明的类型绑定.(静态绑定).
3 成员变量(静态或非静态): 成员变量与引用所实际声明的类型绑定.(静态绑定).
- /**
- * 多态的演示
- * @author fhd001
- */
- public class DtTest {
-
- public static void main(String[] args) {
-
- ChildClass c1 = new ChildClass();
- c1.aaa();
- c1.bbb();
- System.out.println(c1.n);
- System.out.println(c1.str);
-
- parentClass p1 = new parentClass();
- p1.aaa();
- p1.bbb();
- System.out.println(p1.n);
- System.out.println(p1.str);
-
- parentClass p2 = new ChildClass();
- p2.aaa(); //aaa()是实例方法,它与实际引用的对象绑定
- p2.bbb(); //bbb()是静态方法,它与实际声明的类型绑定
- System.out.println(p2.n); //n是变量,它与声明的类型绑定
- System.out.println(p2.str); //str变量,它与声明的类型绑定.
- }
- }
-
- // 父类
- class parentClass {
-
-
int n = 12;
-
static String str = "abc";
-
- void aaa(){
-
System.out.println("parentClass------>aaa");
- }
-
- static void bbb(){
-
System.out.println("parentClass------>bbb");
- }
- }
-
- //子类
- class ChildClass extends parentClass{
-
-
int n = 18;
-
static String str = "efg";
-
- void aaa(){
-
System.out.println("ChildClass-------->aaa");
- }
-
- static void bbb(){
-
System.out.println("ChildClass-------->bbb");
- }
- }
例子2:
import java.util.*;
class Shape {
public void draw() {
}
public void erase() {
}
}
class Circle extends Shape {
public void draw() {
System.out.println("Circle.draw()");
}
public void erase() {
System.out.println("Circle.erase()");
}
}
class Square extends Shape {
public void draw() {
System.out.println("Square.draw()");
}
public void erase() {
System.out.println("Square.erase()");
}
}
class Triangle extends Shape {
public void draw() {
System.out.println("Triangle.draw()");
}
public void erase() {
System.out.println("Triangle.erase()");
}
}
class RandomShapeGenerator {
private Random rand = new Random(47);
public Shape next() {
switch (rand.nextInt(3)) {
default:
case 0:
return new Circle();
case 1:
return new Square();
case 2:
return new Triangle();
}
}
}
public class Shapes {
private static RandomShapeGenerator gen = new RandomShapeGenerator();
public static void main(String[] args) {
Shape[] s = new Shape[9];
for (int i = 0; i < s.length; i++)
s[i] = gen.next();
for (Shape shp : s)
shp.draw();
}
}
运行结果为:
Triangle.draw()
Triangle.draw()
Square.draw()
Triangle.draw()
Square.draw()
Triangle.draw()
Square.draw()
Triangle.draw()
Circle.draw()
分享到:
相关推荐
java多态的基础知识,你可能了解,但是如何使用?内附例子。究竟如何实现,帮你学习基础。
java 的多态是java的重要的四大特性之一,多态又有多少人真正说的清楚呢?这里有最经典的例子,最生动的最鲜活的例子讲解,相信你一定能学会
该资料,是一个多态的例子,充分的掌握多态,让多态得到很好的应用
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
本实例详细阐述java平台下如何实现多态,多态有什么特征,以及需要注意的地方,小例子。
java的多态例子,适合初学者学习java的多态特性
Java继承与多态专题讲解,详细生动,例子丰富,适合初学者
继承和多态的相关Java源码下载,比较散,像覆盖和重载、对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏、调用父类的方法...
先来复习下java多态:java多态指的是父类引用指向子类对象,不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。 接下来我们再说下什么叫策略模式:将每一个算法封装到...
主要介绍了java 多态实例代码,具有一定借鉴价值,需要的朋友可以参考下
c#多态,继承,接口,结构例子
笔者校招面试时被问到了著名问题「C++ 与 Java 如何实现多态」,然后不幸翻车。过于著名反而没有去准备,只知道跟虚函数表有关。面试之后比较了 C++ 和 Java 多态的实现的异同,一并记录在这里。 C++ 多态的虚指针...
首先,明确一下,Java多态的三个必要条件: 1、 继承 2、 子类重写父类方法 3、 父类引用指向子类对象 然后看一个例子 package test.xing; class Father{ protected int age; public Father(){ age...
Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页)....
继承和多态简单例子文本文档.txt
下面小编就为大家带来一篇java用两个例子充分阐述多态的可拓展性介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Java课程的一道实验考试题。主要是关于IO(从键盘输入),继承,多态(动态绑定,静态绑定),集合(客户化排序)等内容。感觉对于理解多态和继承还是挺有作用的。
java 重载,继承,重写和多态的区别. 下面的例子包含了这四种实现
7. 实现接口和多态:演示了如何定义接口和实现多态,以及如何通过接口引用实现多态的效果。 8. 使用递归实现阶乘:展示了使用递归算法计算给定数的阶乘。 9. 使用Java集合类实现队列:演示了如何使用Java集合类中的...
Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页)....