Java:关于对象的概念

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());

大家好,我是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());
        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的类呢。