难以理解对象的状态、行为和标识?

27

我的教授要求我在一个页面上介绍自己,就像我是一个对象一样,并且我必须涉及三个方面:
1)对象状态,2)行为和3)身份。

然而,我仍然很困惑,不知道我应该如何去做这样的事情。(我已经阅读了关于我必须涉及的三个属性,但我不知道如何将其应用于一个人。)
例如,我被告知狗会有状态,如名字、颜色和品种;以及行为,如走路、叫唤或摇尾巴。

那么,我应该做类似于:

Student me = new Student();
System.out.println(me.getName()); //a state?
System.out.println(me.getCurrentActivity()); //A behavior? (if it were to return watching TV or something) 
System.out.println(me.get....()); //???

还是我完全错了吗?

5个回答

54

对象的特点包括:

状态对象拥有的属性,例如学生有名字、姓氏、年龄等。

行为对象能够执行的操作,例如学生参加“Java初学者”课程。

标识使它们独一无二的属性,例如学生有学号或唯一的电子邮件。(在实现equals方法时非常重要,以确定对象是否不同)

Student john = new Student("John");
john.setCurrentActivity("Learning Java");
john.setAge(21);
john.setWeight(173);
john.setAddress(...);
john.setHobbies(...);

你可以找出这些getter方法。

public class Student {
    private String name;
    private int    age;
    //etc

    // construct a new student 
    public Student(String name) {
        this.name   = name;
    }

    public setAge(int age) {
        this.age   = age;
    }

    public int getAge() {
        return age;
    }
}

这是一张汽车对象的插图,我认为它可能会对你有所帮助...

汽车状态:

  • 速度
  • RPM(转速)
  • 挡位
  • 方向
  • 燃油量
  • 发动机温度

行为:

  • 换挡
  • 加速/减速
  • 倒车
  • 停止
  • 关闭

身份:

  • VIN(车辆识别号码)
  • 牌照

1
谢谢您的帮助,但我还需要知道他们认为什么是状态、行为和身份。这些是我不理解/寻求帮助的主要问题。 - TheNewGuy
1
通过对Identity的解释,我认为身份更多地与唯一对象有关。学生ID和电子邮件ID将是学生的属性。 - JNL
具有独特性质的对象,在领域中也是独一无二的。这与对象的哈希码不同。 - MrSimpleMind
这完美地回答了我的问题,谢谢你的帮助! - TheNewGuy
如果状态是由属性定义的,那么为什么人们说静态类没有状态?静态类也有属性。你能帮我解释一下吗? - kudlatiger
1
听起来你在谈论C#?因为Java没有“top”静态类,但你可以使用静态嵌套类或使用final类使所有方法都是静态的等等...但无论如何...你应该把静态看作是你的状态都是相同的,对于所有调用者而言,只有一个副本...你不需要类的实例来使用“状态”。它们是静态的,只有一个副本,对吧。 - MrSimpleMind

5

所有对象都有三个基本特征:

  • 状态
  • 行为
  • 标识

对象的状态是由对象的属性以及它们所具有的值来定义的。 在您的案例中,例如:姓名、年龄、性别。

术语“行为”是指对象如何相互交互,并且由对象可以执行的操作来定义。在您的案例中,学生对象可以执行某些活动吗?

student.getResults();
  • 身份:

即使具有相同属性和行为的对象也具有自己独特的身份。

例如,

两辆由同一制造商在同一年建造的蓝色旅行车仍然是独立且唯一的汽车。

对象的身份独立于其属性或操作。因此,无论属性取何值,对象都将保留其身份。


我明白了。所以行为就如我所解释的,看电视或与人交谈。不过身份是什么呢? - TheNewGuy

5
作为对@MrSimpleMind标记为最佳答案的回答的更正,并详细说明@JNL的答案:

身份并不是使对象在状态上独一无二的东西(例如,名称 =“Tim”或其他)。然而,身份是指对象在内存中的位置是唯一的。
如果您想了解更多信息,请查看OOP中的身份Wiki页面

更新
值得一提的是,它并不总是以内存中的位置为基础。当将对象保存到数据库时,它实际上将被保存为行,在这里使用ID列。


@MrSimpleMind的回答没有任何问题,因为它是与所提问的方式相关的概念性描述。即使你在技术上是正确的。 - Abdel-Raouf

0

状态:- 状态是对象变量的值

行为:- 是对象的方法

身份:- 它是对象的名称。

e.g:-

类car{

int speed = 100;

void accelerate(){ }

}

class_car obj_car;

在这里,

状态:速度

行为:加速

身份:obj_car


0
在对象的编程实现中,其状态由其实例变量定义。实例变量对于对象是私有的。除非明确地公开或提供给其他“友好”类,否则对象的实例变量无法从对象外部访问。
对象的行为由其方法定义。方法操作实例变量以创建新状态;对象的方法也可以创建新对象。 Java白皮书第34页

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接