今天在写一个程序的时候发现一个问题,于是写了一段代码测试,代码最终的运行结果是dog.a=15,an.a=10
于是有不明白的地方,代码如下,Dog类继承了Animal类,方法f()的参数是Animal的实例,我将Dog的一个实例dog传进去,发现dog中的属性a并没有被修改,疑惑的是Animal实例an中的属性a也没有被修改,那么f()方法的an.a--究竟是在哪里减了?我自己的猜想是因为dog也是Animal的一个实例,在调用方法时被当作Animal的实例指向了一块临时为Animal实例
an(形式参数)开辟的内存,进而在那段内存里执行了方法,但是方法结束内存后内存里的变量消失了,所以最终什么也没有改变,不知道我的想法对不对,求大神解释,谢谢!
package com.test;public class demo1 {public static void main(String[] args) {
// TODO Auto-generated method stub
Animal an = new Animal();
Dog1 dog = new Dog1();
Fun fun = new Fun();
fun.f(dog);
//fun.f(an);
System.out.println("dog.a="+dog.a);
System.out.println("an.a="+an.a);
}}
class Animal
{
int a=10;
int b=20;
}class Dog1 extends Animal
{
int a=15;
}class Fun
{
public void f(Animal an)
{
an.a--;
}
}