【发布时间】:2016-11-28 22:31:21
【问题描述】:
我试图找出访问抽象类的私有字段的正确方法,然后在扩展抽象类的类中使用它。
下面是我的抽象类
流程类(抽象):
public abstract class Process implements Runnable {
private final Properties props;
private final String processName;
public Process(String processName, Properties props) {
this.processName = processName;
this.props = props;
}
public abstract void shutdown();
public Properties getProps() {
return props;
}
public String getProcessName() {
return processName;
}
}
以下是我扩展上述抽象类并使用props Properties 对象的一种方式。
ProcessA 类:
public class ProcessA extends Process {
private ProcessConsumer<byte[], byte[]> consumer;
public ProcessA(String processName, Properties props) {
super(processName, props);
}
@Override
public void run() {
// is this the right way?
String processName = getProcessName();
Properties props = getProps();
consumer = new ProcessConsumer<>(props);
// .. some other code with try catch block
// using processName and consumer
}
@Override
public void shutdown() {
consumer.wakeup();
}
}
下面是我扩展上述抽象类和使用属性对象的第二种方法。
ProcessB 类:
public class ProcessB extends Process {
private final ProcessConsumer<byte[], byte[]> consumer;
public ProcessB(String processName, Properties props) {
super(processName, props);
// is this the right way to use props object?
this.consumer = new ProcessConsumer<>(props);
}
@Override
public void run() {
String processName = getProcessName();
// .. some other code with try catch block
// using processName and consumer
}
@Override
public void shutdown() {
consumer.wakeup();
}
}
我想使用props 属性来制作ProcessConsumer 对象,但我很困惑使用props 对象的正确方法是什么?我应该在 run 方法中的抽象类上调用 getProps 方法然后使用它吗?或者只是把它放在构造函数中并在那里构建它?
有什么区别,什么是正确的方法?
【问题讨论】:
-
私有的意义在于它不能在任何地方访问,只能从类本身的代码中访问,而不是在扩展类或其他类中。如果您确实希望能够访问它,则应该对其进行保护。不过,最好制作某种受保护的或公共的访问器。
标签: java oop abstract-class