代码改变世界

一个关于继承和多态的问题(提问篇)

2004-12-28 00:00  FantasySoft  阅读(...)  评论(...编辑  收藏

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

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()的话,结果又是什么呢?也许问题很简单,还请各位不吝指教,谢谢!