我有两个类Test
和Encap
。我有一个私有变量a
和访问通过setter和getter方法。我用Encap
继承了Test
类。
现在我可以用setValue(int a)
来改变a
的值。我想限制这个选项。我想让它成为一个只读值。请帮助我这件事。
class Test
{
private int a;
protected void setValue(int a)
{
this.a = a;
}
protected void getValue()
{
System.out.println("The assigned value of a is : "+this.a);
}
}
public class Encap extends Test {
public static void main(String [] args)
{
Test t = new Test();
t.setValue(4);
t.getValue();
Encap e = new Encap();
e.setValue(3);
e.getValue();
}
}
一种选择是从类Test
中删除方法setValue()
:
class Test
{
private int a;
protected void getValue()
{
System.out.println("The assigned value of a is : "+this.a);
}
}
编辑:为什么要这样做?如果Encap
继承自Test
,它应该能够做与Test
相同的动作。否则,继承的目的是什么?如果你仍然认为Test
应该能够修改值,而Encap
不能,也许你的设计是错误的。您可以尝试这样做:
BaseClass
---------
+getValue
/
/
Test Encap
-------- ---------
+setValue
如果您的意思是希望派生类不公开超类的公共方法,那么您的代码可能"闻起来"…
记住继承模型是"Is A"
所以在你的例子中,Encap 是一个测试,你应该能够对Encap做任何你可以对测试做的事情。
然而,如果你只是必须从一个你不想公开父类方法的类继承,你可以重写这个方法,让它的主体什么都不做。但对于简单的getter和setter访问方法,这可能会让代码的客户端感到非常困惑。如果你不能调和的事情和调用setValue()上的Encap从来都不是正确的事情,我建议重写的方法,自由地评论它,让它什么都不做,或者抛出一个异常,以表明客户端,他们正在做的事情是没有意义的。