2013-12-17 101 views
1

考虑一个简单的类A该类中使用的OOP概念

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

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

我问面试官,他是什么意思的OOPS概念和得到的答复是general OOPS concepts like inheritance, polymorphism, etc, etc.,

我回答说,继承不是在上面的代码(没有基类派生自)和唯一的答案,我能想到的在这个运动是这样的:

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

你们有什么东西可以抓到?

编辑:

会是怎样在C#?在java中,我们有默认修饰符internal。 如果对c#要求相同的问题,是否有任何更改?

+1

封装是我看到的唯一概念 – user1233963

+0

@ user1233963:那么,你也意味着变量隐藏的东西? ('id'被封装了吗?) –

+0

这里没有'Encapsulation','id'的访问修饰符是默认的。 –

回答

6

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

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

封装(是的,可变隐藏的东西)也被违反,因为id具有内部而非私有的可见性,使得它对于同一包中的其他类无可见的可见性。

+0

感谢您的积分。另一件我现在注意到的事情是:'getNextId'不是一个可接受的名字,因为你调用了'getId'函数多少次,它只会返回1 –

+0

我也标记过'C#',以查明是否存在任何与该语言相关的功能。因为在C#中,默认情况下,一个类的所有成员都是私有的。 –

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

那么它遵循了什么,但抽象,ADT但它没有封装不幸。我们不能称它为封装,因为变量不是私有的,并且由于它没有隐藏数据而具有评估者方法。我们可以说它只有在私人访问说明符ID为时才遵循封装。