You could use inner classes, there is then a implicit parent-child relationship between the two instances. (But I don't know if it's really better).
public class ClassA {
private boolean ClassAattr = false;
public class ClassAHandler extends GeneralHandler {
public ClassAHandler() {
// can access ClassAattr
}
}
public ClassA() {
ClassAHandler handler = new ClassAHandler();
}
}
If you pass this
, the subclass will need to access the parent value with parent.classAattr
. We can wonder whether it's correct according to the law of demeter.
Another option then would be that ClassA
pass all the information that ClassAHandler
requires in the constructor. If the handler requires the value of ClassAttr
, pass it in the constructor.
public ClassA() {
ClassAHandler handler = new ClassAHandler( classAattr );
}
But the parameter is passed by value so I don't know if it works for you.
A third option would be to change the design a bit and have the boolean
be in the handler. Then ClassA
accesses the value of the child with handler.handlerAttr
. The child knows nothing about the parent, but the parent can access as much information in the child has he wants. This is better regarding the law of demeter.
public class ClassAHandler extends GeneralHandler {
boolean handlerAttr;
public ClassAHandler() {
}
}