关于OOP的问题

时间:2011-07-31 08:14:42

标签: java oop

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';
    }
}

上述代码违反了哪个OOPS原则? •抽象 •封装 •多态性 •以上都不是

我知道Encapsulation是这个问题的答案。只是想知道其他选项是否也是如此。

5 个答案:

答案 0 :(得分:5)

好吧,我会用这些术语来看待它:

  • 封装:通过允许直接访问color 字段Car类正在公开实现细节。 Ignacio已经表明他不会将这种类型的违规视为封装,而是数据隐藏 - 我自己对“封装”一词的看法是它包含数据隐藏。这只是为了说明如何以不同的方式使用这些词。

  • 多态性:通过名称MyCarCar判断应该可能实现公共接口或具有公共基类。至少,给出的类不能多态使用。

  • 抽象:我认为使用char作为颜色的抽象是不合适的。是否违反抽象取决于“抽象违规”的含义。

答案 1 :(得分:0)

如果public char color;代替private char color;,那么它就是封装的一个例子。这是因为在您当前版本的代码中,值立即设置,这是一个实现细节。例如,您可以决定添加验证 - 例如,仅允许大写字符。通过允许直接设置字段color,无法执行验证。

答案 2 :(得分:0)

Car中违反了信息隐藏。

我认为其他原则正式得到尊重,即。如果两个类不打算以多态方式使用,那么就没有什么能阻止我将MyCar类包装到Car类中。

有人可能会说这只是糟糕的设计,我同意。

同样适用于使用char作为颜色:它可能是糟糕的设计,但IMHO没有正式反对OOP原则。

答案 3 :(得分:0)

根据我的理解,“数据隐藏”被违反。当您暴露内部时 Car类(颜色)的详细信息,您也可以公开它,任何人都可以使用Valid或In Valid值修改它。 现在看看Encapsulation OOP原理: 封装:它没有被违反,因为相关数据保存在一个干净的封闭容器中,这里是类,并且汽车信息不会分散在这里和那里。

答案 4 :(得分:0)

根据OOPs Concept,您的代码违反数据隐藏。因为你在类级别声明公共变量并且在方法同一类中也使用它。如果您违反了数据隐藏,则意味着您还违反了封装

public class Car 
{
   public char color;

   public char getColor()
   {        
     return color;    
   }    

   public void setColor(char color)
   {       
     this.color = color;    
  }
 }

在上面的代码中,您违反了数据隐藏概念。因为颜色变量可以在课堂外直接访问。上述代码也违反了封装