Java编程:多态和向上转型

以下代码为例: 
 1 None.gif public   class  Sample
 2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 3InBlock.gif    public static void main(String [] args)
 4ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 5InBlock.gif        A a = new B();  //父类A引用子类B的实例
 6InBlock.gif        if(a instanceof B)
 7InBlock.gif            System.out.println("对象 a 是类 B 的实例");
 8InBlock.gif        B b = (B)a;     //向下转型
 9InBlock.gif        if(b instanceof B)
10InBlock.gif            System.out.println("对象 b 是类 B 的实例");
11InBlock.gif        C c = new D();  //父类C引用子类D的实例
12InBlock.gif        if(c instanceof D)
13InBlock.gif            System.out.println("对象 c 是类 D 的实例");
14InBlock.gif        D d = (D)c;     //向下转型
15InBlock.gif        if(d instanceof D)
16InBlock.gif            System.out.println("对象 d 是类 D 的实例");
17InBlock.gif
18ExpandedSubBlockEnd.gif    }

19ExpandedBlockEnd.gif}

20 None.gif
21 None.gif class  A
22 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
23ExpandedBlockEnd.gif}

24 None.gif
25 ExpandedBlockStart.gifContractedBlock.gif class  B  extends  A dot.gif {}
26 ExpandedBlockStart.gifContractedBlock.gif class  C  extends  B dot.gif {}
27 ExpandedBlockStart.gifContractedBlock.gif class  D  extends  C dot.gif {}

向上转型:
1 None.gif interface  A
2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
3InBlock.gif    abstract void method();
4ExpandedBlockEnd.gif}

1 None.gif class  B  implements  A
2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
3InBlock.gif    public void method()
4ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
5InBlock.gif        System.out.println("子类B的方法调用");
6ExpandedSubBlockEnd.gif    }

7ExpandedBlockEnd.gif}

1 None.gif public   class  C
2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
3InBlock.gif    public static void main(String [] args)
4ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
5InBlock.gif        B b = new B();
6InBlock.gif        A a = (A)b; //向上转型
7InBlock.gif        a.method();
8ExpandedSubBlockEnd.gif    }

9ExpandedBlockEnd.gif}
第6行,类的类型从子类B转为父类A。
第7行,引用变量a与实例方法method()动态绑定,并实现(覆盖)该方法。

引用: http://blog.sina.com.cn/u/462c6ebc0100058q
参考:《Java2全方位学习》第8章 深入Java面向对象程序设计

转载于:https://www.cnblogs.com/georgewing/archive/2007/03/08/667527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值