![]() |
1
3
如果变量是
但是,该类的设计器可能是错误的。首先,这不是一个好的假设,但是如果你真的需要它们,你可以打电话给:
|
![]() |
2
1
如果变量是私有的,那么就不能在定义它们的类之外访问它们。 通过将这些字段分配给类B的构造函数中的字段,可以在A中隐藏这些字段。但是,如果A中的值发生了变化,您将不知道B类中的这些变化,反之亦然。 |
![]() |
3
1
我假设您需要扩展a,因为还有其他事情需要a,并且您希望能够替换子类型? 我还假设您有a的源代码,正如上面所显示的那样? 解决方案(不是很好的解决方案,因为在处理第三方类的升级时会遇到问题,但可能是可行的)是: 将a的整个源复制到新文件b。 将类定义和构造函数更改为:
现在您有了一个子类来覆盖父类的每个方法(使用完全相同的代码)。 根据需要修改b。 或者,更好的是,使B中的实例变量受到保护,然后创建扩展B的第三个子类C,并将您的更改放在以下位置:
现在,您的子类可以直接访问父类的实例变量,而父类的(a)则是完全隐藏和不相关的。您还将代码与第三方代码分开,这意味着您可以更轻松地处理第三方的更新和升级。 |
![]() |
4
0
如果在子类中确实需要私有成员,那么您的问题表明超类的设计很差。可继承的类(如“a”是因为它没有“final”限定符)必须仔细设计,以避免遇到类似问题。最好的解决方案是重写类A以更好地支持继承。 否则,其他的答案是合适的。 |
![]() |
Brendan · Java中从父类继承的对象的ArrayList 2 年前 |
![]() |
Tali · 继承-您应该使用基类,还是它们只是子类的框架? 3 年前 |
![]() |
mask2 · 如何轻松访问继承类的功能? 3 年前 |
![]() |
Dimon · 父类中的Setter,以及一些没有参数的子类 3 年前 |
![]() |
Miguerurso · Javascript类继承无法正常工作 3 年前 |
![]() |
GuessMe · 返回新类对象的正确方法(也可以扩展) 3 年前 |
![]() |
Daniel Lizik · 重写父类构造函数的子类成员初始值设定项 3 年前 |
![]() |
i_know_what · 以基类作为参数重写错误的方法 3 年前 |