下面这段代码就可以,感觉很离奇。怎么解释呢?
class Person
{
private String name;
private int age;
public Person(String name, int age)
{
this.name = name;
this.age = age;
}
public void change(Person p)
{
p.name = "李四";
p.age = 50;
}
public void print()
{
Console.WriteLine("姓名:" + this.name);
Console.WriteLine("年龄:" + this.age);
}
}
public class Demo
{
public static void Main()
{
Person p = new Person("张三", 30);
p.change(p);
p.print(); Person p2 = new Person("Jack", 20);
p.change(p2);
p2.print();
Console.Read();
}
}
class Person
{
private String name;
private int age;
public Person(String name, int age)
{
this.name = name;
this.age = age;
}
public void change(Person p)
{
p.name = "李四";
p.age = 50;
}
public void print()
{
Console.WriteLine("姓名:" + this.name);
Console.WriteLine("年龄:" + this.age);
}
}
public class Demo
{
public static void Main()
{
Person p = new Person("张三", 30);
p.change(p);
p.print(); Person p2 = new Person("Jack", 20);
p.change(p2);
p2.print();
Console.Read();
}
}
{
p.name = "李四";
p.age = 50;
}这一句,执行的是P的方法
但是方法的参数传入一个 p2 的实例方法内部其实是 p2.name = "李四";
p2.age = 50;p2 的实例调用它的私有对象,自然是合情合理的
public Person(String name, int age)
{
this.name = name;
this.age = age;
}Person有自己的公有带参数的构造函数,所以能访问,如果去掉就肯定不行了
public void change(Person p)
{
p.name = "李四";
p.age = 50;
}
首先change的方法带的参数就是一个Person的对象
所以上面的p.change(p);p.change(p2);
红色的都只是一个传一个对象而已,这个对象已经为name,age指定了值的
{
p.name = "李四";
p.age = 50;
}
在2008下好像编译不过
p.change(p2)是在p的内部吗?你还是没理解访问域是怎么回事,你在编写Person这个类的时候,传进来的person参数是在Person类定义里面操作的,所以对象p可以访问私有成员,和传进来是那个对象无关的,只要是penson类型就行