posts - 256, comments - 1314, trackbacks - 41, articles - 8
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

        这个问题是我自己的一个盲点问题,因为当我看到以下的代码以及选项的时候,我做出了错误的选择。后来,我知道了原因所在,但是我想应该会有很多不同的解释,特将问题列示如下。首先,先看一下代码:

public class Test {
    
public static void main(String[] args) 
{
      A ref1 
= new
 C();
      B ref2 
=
 (B) ref1;
      System.
out
.println(ref2.g());
    }

}

class A {
    
private int f() 
{
     
return 0
;
    }

    
public int g() {
     
return 3
;
    }

}

class B extends A {
    
private int f() 
{
     
return 1
;
    }
    
    
public int g() 
{
     
return
 f();
    }
    
}


class C extends B {
    
public int f() 
{
     
return 2
;
    }

}

问题是:请问打印出来的是0,是1,是2,还是3?如果是ref1.g()的话,结果又是什么呢?也许问题很简单,还请各位不吝指教,谢谢!

Feedback

#1楼    回复  引用  查看    

2004-12-28 08:22 by jiezhi [未注册用户]
这是java的代码啊

#2楼    回复  引用  查看    

2004-12-28 08:43 by 天下白      
结果应该是一。
属于动态连编那种情况吧。

#3楼    回复  引用  查看    

2004-12-28 08:47 by 柚子男 [未注册用户]
如果用C# 考慮的話,結果應該是1

多態的時候,每個對象真正的是什麽類型是看聲明的時候
ref2 的類型是B,所以調用Class B 的方法g()就是1
ref1 的類型是A,所以調用Class A 的方法g()就是3


#4楼    回复  引用  查看    

2004-12-28 09:00 by wayfarer      
我同意柚子男的看法。

#5楼    回复  引用  查看    

2004-12-28 09:42 by umlchina      
如果是C#的语法,结果就象釉子男说的那样,不过
在Java中就不一样了
除了使用关键字final标明的方法外,Java所有的方法都使用后联编,也就是说java中的方法默认都是相当于C#中的虚方法,
因为虚方法使用后联编,它执行的方法是靠运行时的类型决定的.
在java中结果应该是2吧

#6楼    回复  引用  查看    

2004-12-28 10:03 by umlchian      
不好意思没注意看 ,其实应该都是1,如果在 c类中也加上public int g() {
return f();
} 方法的话才应该都是2

#7楼    回复  引用  查看    

2004-12-28 10:29 by 纯爷们      
如果改成C#代码的话,执行效果当然是1。但是你在方法中并没有override关键字啊,如果加上override
class A
{
public virtual int f()
{
return 0;
}
public virtual int g()
{
return 3;
}
}
class B : A
{
public override int f()
{
return 1;
}
public override int g()
{
return f();
}
}

class C : B
{
public override int f()
{
return 2;
}
}

执行效果应该是2吧

#8楼    回复  引用  查看    

2007-09-08 12:51 by dcf [未注册用户]
运行一下就知道了:都是 1

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-12-28 00:21 编辑过
 
另存  打印
最新IT新闻:
· 56被关一月 危机的是整个视频业
· 李开复:中文搜索是谷歌战略核心
· 《星际争霸2》新图:黑暗圣堂武士Zeratul
· FriendFeed介绍
· 微软在台北发布新色鼠标产品