私は、抽象クラスのプライベートフィールドにアクセスし、抽象クラスを拡張しているクラスでそれを使用する正しい方法が何であるかを調べようとしています。以下は抽象クラスのフィールドにアクセスする正しい方法は?
Processクラス(抽象)私の抽象クラスです:
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オブジェクトを使用していますどのように1つの方法です。
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();
}
}
私はProcessConsumer
オブジェクトを作る際にprops
プロパティを使用したいが、私はprops
オブジェクトを使用するための正しい方法は何か混乱していますか?私は実行メソッドの中で抽象クラスのgetProps
メソッドを呼び出して使用する必要がありますか?それともコンストラクタに入れてビルドしますか?
違いとは何ですか?
プライベートのポイントは、拡張クラスや他のクラスではなく、クラス自体のコードからアクセスできないことです。あなたがそれにアクセスできるようにしたいのであれば、それを保護する必要があります。しかし、何らかの保護されたまたは公共のアクセサーを作るのが良い。 – vextorspace