加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 按值传递和多态

发布时间:2020-12-15 05:13:18 所属栏目:Java 来源:网络整理
导读:参见英文答案 why java polymorphism not work in my example????????????????????????????????????3个 我对编程很新,并且不理解为什么这段代码打印200而不是206.类Cat中的move方法会覆盖Animal类中的move方法.为什么在第2行的方法调用后,Animals中的’locat
参见英文答案 > why java polymorphism not work in my example????????????????????????????????????3个
我对编程很新,并且不理解为什么这段代码打印200而不是206.类Cat中的move方法会覆盖Animal类中的move方法.为什么在第2行的方法调用后,Animals中的’location’实例变量不会更改为206?但是,当我删除类Cat中的方法时,实例变量DOES会更改为206.它背后的逻辑是什么?

public  class Animals {
   int location = 200; //line 1

   public void move(int by) {
       location = location+by;
   }

    public final static void main (String...args) {
        Animals a = new Cat();
        a.move(6); //line 2
        System.out.println(a.location); //200,but should print 206 in my opinion
    }
}

class Cat extends Animals {
    int location = 400;

    @Override
    public void move(int by) { //if this method is removed,a.location prints 206
        location = location+by;
    }
}

解决方法

a.move(6); // line 2
System.out.println(a.location);

在第一行中,您正在Cat中执行该方法,这意味着您正在修改Cat类的变量.

在第二行,您将从Animal打印变量.

您无法在Java中覆盖变量.只有方法.

你所做的是你在Cat上隐藏了实例变量位置,当你在Cat类中修改它时,你不再指向Animal了.当您在Cat类中删除该变量时,您指的是Animal Class.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读