Java:关于对象的概念
大家好,我是Java编程的初学者,想问一个关于OOP的问题。在这个小程序中,我创建了一个Person类,并测试了它的toString()方法。 试验结果如下:Java:关于对象的概念,java,object,Java,Object,大家好,我是Java编程的初学者,想问一个关于OOP的问题。在这个小程序中,我创建了一个Person类,并测试了它的toString()方法。 试验结果如下: public class ex11_2 { public static void main(String[] args){ Object a=new Person("abc1","def1","ghi1"); System.out.println(a.toString());
public class ex11_2 {
public static void main(String[] args){
Object a=new Person("abc1","def1","ghi1");
System.out.println(a.toString());
Object b=new Person("abc2","def2","ghi2");
System.out.println(a.toString());
}
}
class Person{
private static String name;
private static String address;
private static String phoneNo;
public Person(){
}
public Person(String name,String address,String phoneNo){
setName(name);
setAddress(address);
setPhoneNo(phoneNo);
}
public String toString(){
return super.toString()+(" "+getName()+","+getAddress()+","+getPhoneNo()+".");
}
public static String getName() {
return Person.name;
}
public static void setName(String name) {
Person.name = name;
}
public static String getAddress() {
return address;
}
public static void setAddress(String address) {
Person.address = address;
}
public static String getPhoneNo() {
return phoneNo;
}
public static void setPhoneNo(String phoneNo) {
Person.phoneNo = phoneNo;
}
}
我想知道为什么在创建b之后,b的数据字段将替换a的数据字段。
谢谢您的成员变量是静态的,不会附加到类的任何实例
Person@635b9e68 abc1,def1,ghi1.
Person@635b9e68 abc2,def2,ghi2.
静态成员将在类的各个实例中可用。要更正此错误,请将其更改为非静态成员变量
private static String name;
private static String address;
private static String phoneNo;
您的成员变量是静态的,不会附加到类的任何实例
Person@635b9e68 abc1,def1,ghi1.
Person@635b9e68 abc2,def2,ghi2.
静态成员将在类的各个实例中可用。要更正此错误,请将其更改为非静态成员变量
private static String name;
private static String address;
private static String phoneNo;
因为您已经将类变量声明为
static
private String name;
private String address;
private String phoneNo;
这意味着
Person
的每个实例将具有完全相同的值,因为您已将类变量声明为静态
private String name;
private String address;
private String phoneNo;
这意味着
Person
的每个实例将具有完全相同的值,因为名称
、地址
和电话号
字段声明为静态,类Person
的所有对象只有一个副本,或者这些变量在该类的所有对象之间共享
您应该理解这里的
静态
和实例
变量之间的区别。查看这些链接了解更多信息:,由于名称
,地址
和电话号码
字段声明为静态,因此类人员
的所有对象只有一个副本,或者此类的所有对象共享这些变量
您应该理解这里的
静态
和实例
变量之间的区别。查看这些链接了解更多信息:,基本上,您使用的是类的静态
变量,它类似于该类的所有实例(对象)的全局变量。因此,如果您在实例(非静态)方法内修改静态变量,则它们的修改将反映为全局
了解Java中变量的更多信息基本上,您使用的是类的
静态
变量,它类似于该类所有实例(对象)的全局变量。因此,如果您在实例(非静态)方法内修改静态变量,则它们的修改将反映为全局
了解Java中变量的更多信息,请访问从
Person
类变量中删除static关键字。您现在使用它们的方式有效地定义了“全局”状态-即,它们在类的所有实例中共享相同的值。问题解决了。但是,如何使用构造函数中的关键字super创建另一个类,比如名为Student,数据字段为String status的类?有很好的子类化文档(参见自行车/山地自行车示例)。从Person
类变量中删除static关键字。您现在使用它们的方式有效地定义了“全局”状态-即,它们在类的所有实例中共享相同的值。问题解决了。但是,如何在构造函数中使用关键字super创建另一个类,比如名为Student,数据字段为String status的类呢。