A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

下面程序,为什么向上转型结果输出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

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

1 个回复

倒序浏览
您好,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
注意,父类创建子类对象时,形成多态,多态中父类和子类想同的方法名的方法,用子类的方法,静态除外

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!+1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马