随笔 - 382  文章 - 14  评论 - 509 

啥也不说了,看代码:

public class Instrument {

    
protected void play()
    
{
        System.out.println(
"Instrument playing");

    }

    
static void tune(Instrument i)
    
{
        i.play();
    }

}



public class Wind extends Instrument {
    
protected void play() 
    
{
        System.out.println(
"Wind Playing");
    }

    
public static void main(String[] args)
    
{
        Wind flute
=new Wind();
        Instrument.tune(flute);
    }


}



结果会是什么呢,flute被传回父类的时候,是否使用父类的方法呢,看结果: 
结果

posted on 2008-03-13 23:07 玉米丰收 阅读(89) 评论(2)  编辑 收藏 网摘 所属分类: ×JAVA×

  回复  引用    
2008-03-21 16:22 | 林晨 [未注册用户]
Instrument.tune(flute);把一个Wind对象flute传入Instrument的静态方法tune()

这时的i就代表flute,因为这时flute向上转型为Instrument。
i.play();就等同于flute.play(); 调用的当然是子类的方法喽~
  回复  引用  查看    
2008-03-21 22:13 | 青龙张二      
楼上的解释好像不太对吧,flute向上转型没错,不过由于他是一个引用,所以指向的仍然是Wind对象,所以才“Wind Playing”的。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索
[推荐职位]上海盛大网络招聘架构师



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: