Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 封装问题_Java_Encapsulation - Fatal编程技术网

Java 封装问题

Java 封装问题,java,encapsulation,Java,Encapsulation,我现在正在进行一项计算机科学研究,我对这个问题有了一个有趣的答案。显然答案是E,但由于封装的原因,我不同意。为什么答案是E而不是C 一类粒子有一个私人场,双速度场和公共场 方法双getVelocity()和void setVelocity(双v)。它也 有一个方法public void hit(Particle p){} 以下哪项可以替换hit to中的 让它编译时没有错误 一, 二, double v = velocity; velocity = p.getVelocity();

我现在正在进行一项计算机科学研究,我对这个问题有了一个有趣的答案。显然答案是E,但由于封装的原因,我不同意。为什么答案是E而不是C

一类粒子有一个私人场,双速度场和公共场 方法双getVelocity()和void setVelocity(双v)。它也 有一个方法public void hit(Particle p){}

以下哪项可以替换hit to中的 让它编译时没有错误

一,

二,

  double v = velocity;
  velocity = p.getVelocity();
  p.setVelocity(v);
三,

  double v = velocity;
  velocity = p.velocity();
  p.velocity = v;
我只是

B.仅限II类

C.I和II

D.二和三


EI、II和III封装是一个重要的工具,它允许类成为唯一负责其实例状态的类。但是,由于这是一个粒子操纵同一类的另一个实例的字段,因此它可以访问另一个实例的所有方法和字段(包括
private
方法和字段),关于封装的典型问题不适用

类似的情况出现在
equals
方法实现中,其中一个类的实例通常直接将其字段与同一个类的另一个实例的字段进行比较


(这假设III中对
velocity()
的引用是指
getVelocity()
;否则,它可能是一个编译错误。)

尽管根据规范,字段
velocity
被封装并声明为
private
,但它是在
Particle
类中声明的。这意味着
Particle
类中声明的任何方法都可以访问此值。只有
Particle
和其他类的子类不能访问此变量,但是
hit()
肯定可以直接访问此变量


即使是
Particle
类的不同对象也可以访问其他
private
成员。

III中的代码无法编译,没有为
Particle
类描述的
velocity()
方法。@Luiggi这是真的,但我将其归因于转录错误。OP特别指的是封装冲突,而不是缺少符号。假设这是一个打字错误,那么你是对的。如果III中的代码是
p.getVelocity()
而不是
p.velocity()
,那么它就是正确的。如果是打字错误,请修复它。否则,你是对的,C是正确的答案。
  double v = velocity;
  velocity = p.velocity();
  p.velocity = v;