我现在正在阅读计算机科学研究指南,我发现了这个问题的有趣答案。显然答案是E,但由于封装我不同意。为什么答案是 E 而不是 C?
A class Particle has a private field double velocity and public methods double getVelocity() and void setVelocity(double v). It also has a method public void hit(Particle p) { < Missing statements > }
Which of the following could replace < Missing statements > in hit to make it compile with no errors?
我.
double v = getVelocity();
setVelocity(p.getVelocity());
p.setVelocity(v);
二。
double v = velocity;
velocity = p.getVelocity();
p.setVelocity(v);
三。
double v = velocity;
velocity = p.velocity();
p.velocity = v;
一个。我只是
B.仅二
C.一、二
D.二、三
E I、II 和 III
最佳答案
封装是一种重要的工具,它允许类成为唯一负责其实例状态的类。然而,因为这是一个 Particle 操纵同一个类的另一个实例的字段,它可以访问另一个实例的所有方法和字段(包括 private
方法和字段),并且典型的关注点封装不适用。
类似的情况发生在 equals
方法实现中,其中一个类的实例通常直接将其字段与同一类的另一个实例的字段进行比较。
(这假定在 III 中对 velocity()
的引用意味着 getVelocity()
;否则,它可能是一个编译错误。)
关于java - 封装问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23483201/