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?
还有就是静态方法的隐藏和普通方法的覆盖有什么区别?
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?
还有就是静态方法的隐藏和普通方法的覆盖有什么区别?
查看父类有没有,有的话调用父类的,但不能调用其没有的但子类有的方法!
B ref2 =(B) ref1;的效果是将ref1这个对象强转成B类
B中的方法g()可以覆盖A类中的方法g()
但B中的方法f()不可以,因为父类f()中的方法是私有的,所以调用B类中的方法返回1.
至于你的第二个问题中静态方法的隐藏,不好意思不知道你指的什么意思