先看如下代码:class Country { String name="xianfan"; String value(String name) { name = "China"; return name; }} class City extends Country { String name; String value(String name) { name = "Hefei";super.value("失败"); System.out.println(name); System.out.println(super.name); return name; } public static void main(String[] args) { City c=new City(); c.value("成功"); }} 结果为:Hefeixianfan
各位进来的兄弟们,我的问题是:
子方法是,子类调用带参的super.value(xxx).父类的相应方法执行后不能改变父类成员变量的值name
而我试过只要不带参如super.value().(相应方法进行必要修改后)却能改变父类中的成员变量name的值。
各位进来的兄弟们,我的问题是:
子方法是,子类调用带参的super.value(xxx).父类的相应方法执行后不能改变父类成员变量的值name
而我试过只要不带参如super.value().(相应方法进行必要修改后)却能改变父类中的成员变量name的值。
class Country { String name="xianfan"; String value(String name) { name = "China"; return name; }}String name="xianfan";与 name = "China"
你估计认为这两个name是一个变量,应该是两个变量,你传参数的变量只改变name = "China",而你输出的name与super.name(),是方法外定义的那个,String name="xianfan"与name = "Hefei"; 一直没有改变,所以把你搞混乱了,建议你给参数改个名字,你再试试,应该没问题了
name = "China"; 改成this.name = "China";
class Country { String name="xianfan"; public String value(String name) { name = "China"; return name; }
//以下为测试代码
/*public static void main(String[] args) { Country co=new Country(); // co.value("成功");
System.out.println(co.value("成功"));
System.out.println(co.name);
} */
} class City extends Country { String name; public String value(String name) { this.name = "Hefei"; super.value("失败"); System.out.println(name); System.out.println(super.name); return name; } public static void main(String[] args) { City c=new City();
System.out.println("执行方法value前成员变量"+c.name); c.value("成功");
System.out.println("执行方法value后成员变量"+c.name);
}
}
而且父类中的SUPER方法没有修改父类中属性name,它只修改了方法中参数name
楼主问题是:
调用c.value("成功"); 第一个 输出语句就输出方法里面声明的确 name = "Hefei";
第二个 输出语句就父类的确String name="xianfan"; 因为
super.name就是引用父类String name="xianfan";
你可以用ECLIPSE中的DEBUG调试下就知道了,
下面是注释的代码:package net.csdn.blog.johnston;public class City extends Country { String name; String value(String name) { name = "Hefei"; super.value("失败"); System.out.println(name); System.out.println(super.name); return name; } public static void main(String[] args) { City c=new City(); c.value("成功"); } }class Country { String name="xianfan"; String value(String name) { name = "China"; //此处应该改为this.name = "China";就是类的成员变量,否则还是你局部变量,你在后面输出的是类Country在成员变量 return name; }}