本课程中使用的OOP概念

时间:2013-12-17 11:10:47

标签: c# java class oop

考虑一个简单的类A

class A
{
   int id=0;
   public int  getId()
   {
      return this.id++;
   }
}

问题是 What are all the OOPS concepts used in the above class?

我问面试官,OOPS Concepts的意思是什么,回复是general OOPS concepts like inheritance, polymorphism, etc, etc.,

我回答说继承不在上面的代码中(没有派生的基类),我能想到的唯一答案是:

variable-hiding因为私有变量id只能通过getId方法访问。

你们有没有抓到的东西?

修改

c#会是什么?在java中,我们将默认修饰符设置为internal。 如果要求c#提出相同的问题,是否有任何改变?

2 个答案:

答案 0 :(得分:6)

一个更好的问题是关于所有违反的良好编程习惯。

选择getId(),它看起来像一个简单的getter,但实际上修改了类的状态。它应该被称为generateId(); getNextId()本来可以接受。

封装(是的,变量隐藏的东西)也被违反,因为id具有内部而非私有的可见性,使得它在同一个包中的其他类可见,没有充分的理由。

答案 1 :(得分:1)

class A
{
  private int id=0;
   public int  getId()
   {
      return this.id++;
   }
}

好吧它除了抽象作为ADT之外什么都没有,但不幸的是它有没有封装。当变量是非私有的并且它具有评估器方法时,我们不能将其称为封装,因为它没有隐藏数据。我们可以说它只有在id 处有私有访问说明符时才会进行封装。