标题: 看到的一个程序不是很明白,请指点!!! [打印本页] 作者: 唐侠君 时间: 2013-12-16 01:29 标题: 看到的一个程序不是很明白,请指点!!! 下面程序,为什么向上转型结果输出sub.getField()=1 而不是0或者sub.field=0而不是1 求解释???
public class Super {
public int field=0;
public int getField(){
return this.field;
}
}
public class Sub extends Super{
public int field=1;
public int getSuperField(){
return super.field;
}
public int getField() {
return this.field;
}
}
public static void main(String[] args) {
Super sub=new Sub();
System.out.println("向上转型结果如下");
System.out.println("sub.field="+sub.field);
System.out.println("sub.getField()="+sub.getField());
Sub sub1=new Sub();
System.out.println("向下转型结果如下");
System.out.println("sub1.field="+sub1.field);
System.out.println("sub1.getField()="+sub1.getField());
System.out.println("sub1.getSuperField()="+sub1.getSuperField());
}
运行结果:
向上转型结果如下
sub.field=0
sub.getField()=1
向下转型结果如下
sub1.field=1
sub1.getField()=1
sub1.getSuperField()=0 作者: 嘿马 时间: 2013-12-16 07:24
您好,Super sub=new Sub(); 这句话实现了多态,多态中,子类和父类一样的方法名的方法,就会重写父类的方法, public int getField()在子父类中都有,所以,当你System.out.println("sub.getField()="+sub.getField())这句话的时候,调用的是子类的方法,你子类方法中写的是 public int field=1; public int getField() { return this.field; }所以返回的 sub.getField()=1
注意,父类创建子类对象时,形成多态,多态中父类和子类想同的方法名的方法,用子类的方法,静态除外