Java编程:多态和向上转型
以下代码为例:
向上转型:
第7行,引用变量a与实例方法method()动态绑定,并实现(覆盖)该方法。
引用:http://blog.sina.com.cn/u/462c6ebc0100058q
参考:《Java2全方位学习》第8章 深入Java面向对象程序设计
1public class Sample
2{
3 public static void main(String [] args)
4 {
5 A a = new B(); //父类A引用子类B的实例
6 if(a instanceof B)
7 System.out.println("对象 a 是类 B 的实例");
8 B b = (B)a; //向下转型
9 if(b instanceof B)
10 System.out.println("对象 b 是类 B 的实例");
11 C c = new D(); //父类C引用子类D的实例
12 if(c instanceof D)
13 System.out.println("对象 c 是类 D 的实例");
14 D d = (D)c; //向下转型
15 if(d instanceof D)
16 System.out.println("对象 d 是类 D 的实例");
17
18 }
19}
20
21class A
22{
23}
24
25class B extends A{}
26class C extends B{}
27class D extends C{}
2{
3 public static void main(String [] args)
4 {
5 A a = new B(); //父类A引用子类B的实例
6 if(a instanceof B)
7 System.out.println("对象 a 是类 B 的实例");
8 B b = (B)a; //向下转型
9 if(b instanceof B)
10 System.out.println("对象 b 是类 B 的实例");
11 C c = new D(); //父类C引用子类D的实例
12 if(c instanceof D)
13 System.out.println("对象 c 是类 D 的实例");
14 D d = (D)c; //向下转型
15 if(d instanceof D)
16 System.out.println("对象 d 是类 D 的实例");
17
18 }
19}
20
21class A
22{
23}
24
25class B extends A{}
26class C extends B{}
27class D extends C{}
向上转型:
1interface A
2{
3 abstract void method();
4}
2{
3 abstract void method();
4}
1class B implements A
2{
3 public void method()
4 {
5 System.out.println("子类B的方法调用");
6 }
7}
2{
3 public void method()
4 {
5 System.out.println("子类B的方法调用");
6 }
7}
1public class C
2{
3 public static void main(String [] args)
4 {
5 B b = new B();
6 A a = (A)b; //向上转型
7 a.method();
8 }
9}
第6行,类的类型从子类B转为父类A。2{
3 public static void main(String [] args)
4 {
5 B b = new B();
6 A a = (A)b; //向上转型
7 a.method();
8 }
9}
第7行,引用变量a与实例方法method()动态绑定,并实现(覆盖)该方法。
引用:http://blog.sina.com.cn/u/462c6ebc0100058q
参考:《Java2全方位学习》第8章 深入Java面向对象程序设计