考虑一个简单的类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#提出相同的问题,是否有任何改变?
答案 0 :(得分:6)
一个更好的问题是关于所有违反的良好编程习惯。
选择getId()
,它看起来像一个简单的getter,但实际上修改了类的状态。它应该被称为generateId()
; getNextId()
本来可以接受。
封装(是的,变量隐藏的东西)也被违反,因为id
具有内部而非私有的可见性,使得它在同一个包中的其他类可见,没有充分的理由。
答案 1 :(得分:1)
class A
{
private int id=0;
public int getId()
{
return this.id++;
}
}
好吧它除了抽象作为ADT之外什么都没有,但不幸的是它有没有封装。当变量是非私有的并且它具有评估器方法时,我们不能将其称为封装,因为它没有隐藏数据。我们可以说它只有在id 处有私有访问说明符时才会进行封装。