2017-05-29 76 views
-1

我有一些带有“保护”范围的字段的泛型类。是否有可能重写或继承类中的这个范围?这里是比如我一般(扩展)类:如何在继承类中“覆盖”字段的作用域?

public abstract class BaseDAO<T extends Entity> { 

protected MongoClient client; 
protected MongoCursor<Document> cursor; } 

那么,怎么样,如果是最具体的,要改变“保护”到“私”在我的继承类?

谷歌不理解我的请求,并提供了有关继承的最基本的教程,这些教程没有给出我的问题的答案。试图在这里搜索一些标签“Java范围覆盖”等。没有工作。

感谢您的反馈!

+1

你不能......它就这么简单。 – Stultuske

+1

如果您重新声明子类中的字段,您将隐藏而不是覆盖(请参阅:https://stackoverflow.com/questions/9414990/if-you-overwrite-a-field-in-a-subclass-of-a -class-子类别,有个字段-W)。就方法而言,您只能增加可见度(例如,保护公开)而不减少(保护到私人)。 –

+0

是的,我知道super.fieldName和只是fieldName是differend变量。但无论如何你回答了我的问题,谢谢! –

回答

-1

这是不可能的,并且不会遵守Liskov substitution principle,因为您的继承类会“隐藏”该字段(即您的继承类无法与BaseDAO无缝交换)。

+0

因此,在继承者中创建私有字段的唯一方法是不继承这些字段,对吗? –

+0

不确定你在这里是什么意思。您的子类将始终继承父字段,因此您无能为力。但是你绝对可以在你的子类中添加私有字段。 – jdebon

+0

是的,这就是我所问的。谢谢! –

-1

您已经收到正确答案。你不能降低能见度只能增加它。 (as @ d.j.brown said)

因此,您可以覆盖父方法并将可见性提高至public,但不能将其降至private