Java OOPs问题
上述代码违反了哪个OOPS原则?Java OOPs问题,java,oop,Java,Oop,上述代码违反了哪个OOPS原则? •抽象 •封装 •多态性 •上述情况均不存在 我知道封装是这个问题的答案。我只是想知道其他选项是否也是正确的。好吧,我会用以下术语来看待它: 封装:通过允许直接访问color字段,Car类公开了实现细节。Ignacio已经证明,他并不认为这种类型的违规属于封装,而是属于数据隐藏——我个人对“封装”一词的看法是,它包括数据隐藏。这正好说明了这些词是如何以不同的方式使用的 多态性:根据名称判断,MyCar和Car可能实现一个公共接口或具有一个公共基类。至少,给定的
•抽象 •封装 •多态性 •上述情况均不存在
我知道封装是这个问题的答案。我只是想知道其他选项是否也是正确的。好吧,我会用以下术语来看待它:
- 封装:通过允许直接访问
字段,color
类公开了实现细节。Ignacio已经证明,他并不认为这种类型的违规属于封装,而是属于数据隐藏——我个人对“封装”一词的看法是,它包括数据隐藏。这正好说明了这些词是如何以不同的方式使用的Car
- 多态性:根据名称判断,
和MyCar
可能实现一个公共接口或具有一个公共基类。至少,给定的类不能多态使用Car
- 抽象:我认为使用
作为颜色的抽象是不合适的。这是否是一个抽象冲突,再次取决于你所说的“抽象冲突”是什么意思char
- 如果
公共字符颜色代码>改为私有字符颜色代码>这将是封装的一个示例。这是因为在当前版本的代码中,值是立即设置的,这是一个实现细节。例如,您可以决定添加验证—例如,只允许大写字符。通过允许直接设置字段颜色
,无法执行验证。在汽车中违反信息隐藏
我认为其他原则在形式上也得到了尊重,也就是说,如果两个类不打算以多态方式使用,那么没有什么能阻止我将MyCar类包装在Car类中
有人可能会说这只是一个糟糕的设计,我也同意
同样的道理也适用于使用字符作为颜色:这可能是一种糟糕的设计,但在形式上并不违背OOP原则。根据我的理解,“数据隐藏”被违反了。因为您正在公开内部
汽车类别(颜色)的详细信息,也可以将其公开,任何人都可以使用有效值或有效值对其进行修改。
现在来看封装OOP原理:
封装:它没有被违反,因为相关数据保存在一个干净的封闭容器中,这里是类,汽车信息不会散落在这里和那里。根据OOPs概念,您的代码被违反数据隐藏。因为您是在类级别声明公共变量,并在同一类的方法中使用它。如果违反了数据隐藏,则意味着也违反了封装
public class Car
{
public char color;
public char getColor()
{
return color;
}
public void setColor(char color)
{
this.color = color;
}
}
public class MyCar
{
private Car car = null;
public MyCar()
{
this.car = new Car();
car.color = 'R';
}
}
在上面的代码中,您违反了数据隐藏的概念。因为颜色变量可以在类外直接访问封装也违反了上述代码
public class Car
{
public char color;
public char getColor()
{
return color;
}
public void setColor(char color)
{
this.color = color;
}
}