Java 访问私有父属性的最佳实践?
假设您有两个类,Java 访问私有父属性的最佳实践?,java,oop,Java,Oop,假设您有两个类,父类和继承自父类的子类Parent有一个属性a,该属性设置为private,子类有一个doSomething()方法,该方法需要访问a如下: public class Parent { private Attriute a; public Parent(Attribute a) { this.a = a; } } public class Child extends Parent { public Child(Attribute a) { sup
父类和继承自父类的子类Parent
有一个属性a
,该属性设置为private,子类有一个doSomething()
方法,该方法需要访问a
如下:
public class Parent {
private Attriute a;
public Parent(Attribute a) {
this.a = a;
}
}
public class Child extends Parent {
public Child(Attribute a) {
super(a);
}
public void doSomething() {
// Need to access to a here
}
}
我的问题是:有没有从孩子
访问a
的最佳方法?我对如何继续下去没有什么想法:
- 在
Parent
中的protected
处设置a
的可见性,但是a
在包中的任何位置都可以访问和修改
- 在
a
的Parent
中创建一个受保护的getter,但它也可以在包的任何地方访问
- 在
子类
中创建一个新的私有属性
字段,并将a
保存到构造函数中。这样,“新a”属性只能从Child
访问,并且它与Parent
属性是同一个对象,但在这两个类中它也会“复制”a
但是我不知道哪一个是最好的,也许这些都不是,所以帮帮我 也许就是你想要的
创建返回private属性的受保护方法,以及一个限制,以便只有子类才能获取该属性
public class Parent {
private Attribute a;
public Parent(Attribute a) {
this.a = a;
}
protected Attribute getA() throws IllegalAccessException, ClassNotFoundException {
if(!getClass().isAssignableFrom(
Class.forName(new Throwable().getStackTrace()[1].getClassName()))) {
throw new IllegalAccessException(
"This method can be accessed by subclass only");
}
return a;
}
}
public class Child extends Parent {
public Child(Attribute a) {
super(a);
}
public void doSomething() throws IllegalAccessException, ClassNotFoundException {
Attribute a = getA();
}
}
在Java中,如果不对同一个包中的所有类授予成员访问子类的权限,就无法授予成员访问子类的权限
只需为字段添加一个getter方法,并将其设置为受保护的。这提供了比您希望的更多的访问权限,但通常是可以接受的
如果封装非常关键,您可以将类移动到其包中,并防止以这种方式允许访问非子类。使用getter和setter。您可以将逻辑放入getter/setter以限制其accessibility@Michael要是那是真的就好了——但事实并非如此。在Java中,protected
提供对包和子类的访问。@davmac显示了我使用实现继承的频率…:)或者把敏感类转移到他们自己的包里。我真的没有得到否决票。我的答案怎么了?