对象,类和实例差异

时间:2018-01-31 15:24:43

标签: java class oop object instance

给出下一个例子:

//class
public class Person {
    private int id;
    private String name;
    private int age;

    //class constructor to instantiate Person class
    public Person (int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (id != other.id)
            return false;
        return true;
    }

    public static void main(String[] args) {
        //case 1
        Person p1 =  new Person(1, "Carlos", 20);
        Person p2 = new Person(1, "Carlos", 20);

        //case 2
        Person p3 = new Person(2, "John", 15);
        Person p4 = new Person(3, "Mary", 17);
    }
}

我能否得出以下结论?:

  1. 对于案例1,我有两个Person类实例,但两个实例都代表同一个对象。
  2. 对于案例2,我有两个Person类实例,但每个实例代表一个不同的对象。
  3. 换句话说,实例和对象具有不同的语义含义?今天这两个术语都被视为同义词,但我不确定它们是否真的是一样的(个人而言,我认为它们是不同的东西)。

    老实说,我对Alfred blog定义感到更舒服:

    对象:真实世界对象共享2个主要特征,状态和行为。人类有状态(姓名,年龄)和行为(跑步,睡觉)。汽车具有状态(当前速度,当前档位)和状态(应用制动,换档)。软件对象在概念上类似于现实世界的对象:它们也包括状态和相关行为。对象将其状态存储在字段中,并通过方法公开其行为。

    :是用于创建对象的“模板”/“蓝图”。基本上,类将由字段,静态字段,方法,静态方法和构造函数组成。 Field用于保存类的状态(例如:Student对象的名称)。方法用于表示类的行为(例如:Student对象如何站立)。构造函数用于创建类的新实例。

    实例:实例是表示Object的Class的唯一副本。当创建一个新的类实例时,JVM将为该类实例分配一个内存空间。

0 个答案:

没有答案
相关问题