Voorbeeld

public static class Base {

public Base( Integer value1, Integer value2 ) {
super();
this.value1 = value1;
this.value3 = getThirdValue();
this.value2 = value2;
}
protected Integer getThirdValue() {
return value1;
}
protected Integer value1;
protected Integer value2;
protected Integer value3;
}

public static class Derived extends Base {
public Derived( Integer value1, Integer value2 ) {
super( value1, value2 );
}
protected Integer getThirdValue() {
// value2 is null
return new Integer( value2.intValue() * 10 );
}
}

public static void main( String[] args ) {
Derived derived = new Derived( new Integer( 1 ), new Integer( 2 ) );
}


Oplossing
Vermijd complexe berekeningen in constructors. Gebruik constructors alleen om de velden van een object te initialiseren.

public static class Base {
public Base( Integer value1, Integer value2 ) {
this.value1 = value1;
this.value2 = value2;
}
public void init() {
value3 = getThirdValue();
}
protected Integer getThirdValue() {
return value1;
}
protected Integer value1;
protected Integer value2;
protected Integer value3;
}

public static class Derived extends Base {
public Derived( Integer value1, Integer value2 ) {
super( value1, value2 );
}
protected Integer getThirdValue() {
return new Integer( value2.intValue() * 10 );
}
}

public static void main( String[] args ) {
Derived derived = new Derived( new Integer( 1 ), new Integer( 2 ) );
derived.init();
}