【发布时间】:2016-06-02 15:53:09
【问题描述】:
如果我正在扩展一个拥有自己受保护的成员变量和方法的类,那么在子类中(或进行扩展的类,以正确者为准),我该如何正确引用这些东西?
例如,如果我在扩展类中有protected int mInt,我是否要在子类中创建另一个int mInt 并初始化它?还是我总是直接引用父类的字段和方法?
我问是因为我需要确保某些对象具有某些字段,所以我需要它们都扩展同一个父类,但我不知道这在如何构造子类中的方法方面意味着什么。我是一直使用super,还是同时制作所有父内容的“本地”副本是个好主意?
【问题讨论】:
-
当你扩展一个类时,你会得到一个受保护成员的“副本”。你不必做任何额外的事情。试试看,你会看到的。
-
如果你真的想“正确”,你也想尽可能避免受保护的字段。它们使推理您的代码变得非常困难。
-
您只需创建一个声明
getName()和getSourceData()的接口,您的函数就可以接受任何实现该接口的对象。一个对象有哪些领域是它自己的私事。 -
@ArukaJ
doesn't this mean it'll accept any-old-thing as long as the data types are correct是的,确实如此。对此有两个答案:首先,接收方法的工作是检查其输入。其次,您还可以创建自己的Name和SourceData类,它们的构造函数将确保它们的构造正确。现在您的界面将显示:public Name getName(),您可以确定无论Name来自何处,它都是格式良好的。仔细想想,这是一件非常强大的事情。 -
@ArukaJ 受保护的方法很好,它们就像可见性略有限制的公共方法。另一方面,受保护的字段几乎没有任何用处,我只能想到非常人为的情况,它们的使用是合理的。
标签: java class oop inheritance