黑马程序员技术交流社区

标题: 看到的一个程序不是很明白,请指点!!! [打印本页]

作者: 唐侠君    时间: 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
注意,父类创建子类对象时,形成多态,多态中父类和子类想同的方法名的方法,用子类的方法,静态除外




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2