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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |