public class Polymorphism2 { 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;}
}
结果是1,为什么我觉得是2?
还有就是静态方法的隐藏和普通方法的覆盖有什么区别?

解决方案 »

  1.   

    B   ref2   =(B)   ref1; ref2是个B的对象,所以首先查看B类有没有g(),有的话就调用B的g(),所以输出是1,没有的话就
    查看父类有没有,有的话调用父类的,但不能调用其没有的但子类有的方法!
      

  2.   

    那么A   ref1   =   new   C();是没有效果的吗,还有谁说下第二问呢?
      

  3.   

    A ref1 =  new C();的效果是A类创建了一个C类的对象,
    B   ref2   =(B)   ref1;的效果是将ref1这个对象强转成B类
    B中的方法g()可以覆盖A类中的方法g()
    但B中的方法f()不可以,因为父类f()中的方法是私有的,所以调用B类中的方法返回1.
    至于你的第二个问题中静态方法的隐藏,不好意思不知道你指的什么意思