Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 OOPs问题_Java_Oop - Fatal编程技术网

Java OOPs问题

Java OOPs问题,java,oop,Java,Oop,上述代码违反了哪个OOPS原则? •抽象 •封装 •多态性 •上述情况均不存在 我知道封装是这个问题的答案。我只是想知道其他选项是否也是正确的。好吧,我会用以下术语来看待它: 封装:通过允许直接访问color字段,Car类公开了实现细节。Ignacio已经证明,他并不认为这种类型的违规属于封装,而是属于数据隐藏——我个人对“封装”一词的看法是,它包括数据隐藏。这正好说明了这些词是如何以不同的方式使用的 多态性:根据名称判断,MyCar和Car可能实现一个公共接口或具有一个公共基类。至少,给定的

上述代码违反了哪个OOPS原则?
•抽象 •封装 •多态性 •上述情况均不存在


我知道封装是这个问题的答案。我只是想知道其他选项是否也是正确的。

好吧,我会用以下术语来看待它:

  • 封装:通过允许直接访问
    color
    字段,
    Car
    类公开了实现细节。Ignacio已经证明,他并不认为这种类型的违规属于封装,而是属于数据隐藏——我个人对“封装”一词的看法是,它包括数据隐藏。这正好说明了这些词是如何以不同的方式使用的

  • 多态性:根据名称判断,
    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;    
        }
       }