首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个程序和一个有关问题

2012-02-19 
一个程序和一个问题public class Polymorphism2 {public static void main(String[] args) {A ref1 new

一个程序和一个问题
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?
还有就是静态方法的隐藏和普通方法的覆盖有什么区别?

[解决办法]
B ref2 =(B) ref1; ref2是个B的对象,所以首先查看B类有没有g(),有的话就调用B的g(),所以输出是1,没有的话就
查看父类有没有,有的话调用父类的,但不能调用其没有的但子类有的方法!
[解决办法]
A ref1 = new C();的效果是A类创建了一个C类的对象,
B ref2 =(B) ref1;的效果是将ref1这个对象强转成B类
B中的方法g()可以覆盖A类中的方法g()
但B中的方法f()不可以,因为父类f()中的方法是私有的,所以调用B类中的方法返回1.
至于你的第二个问题中静态方法的隐藏,不好意思不知道你指的什么意思

热点排行