Collateral method is called

I have this class:

public abstract class AbstractIncomingCall {

    /*
    class properties
    */

    public void changeStatus(/*some parameters*/){
        //store parameters in class properties
        isValid();
    }

    protected abstract boolean isValid();
}

... which extends to this class:

public class IncomingCallImpl extends AbstractIncomingCall{

    //I override the parent method
    public void changeStatus(/*same parameters as parent method*/) {
        super.changeStatus(/*same parameters as parent method*/);
        //do something interesting 
    }

    protected boolean isValid() throws StatusChangeNotOccurredException {
        //implement my validation algorithm
    }

, , - , , changeStatus (/* */) , isValid(); , isValid() , , . , , , isValid() , super? , , , , . , , "isValid()" , , , : P

:]

+3
4

, changeStatus() . changeStatus() ( , ) :

public final void changeStatus()
{
    doSomethingSubclassSpecific();
    isValid()
}


protected abstract doSomethingSubclassSpecific();
+14

changeStatus(). Template Method.

+2

finalStatus final customChangeStatus, . :

AbstractIncomingCall {

/*
class properties
*/

public final void changeStatus(/*some parameters*/){
    //store parameters in class properties
    isValid();
    customChangeStatus();
}

protected abstract void customChangeStatus();
protected abstract boolean isValid();

}

customChangeStatus, . final changeStatus, , . , .

+2
source

I suggest using composition rather than inheritance. Everything should become more obvious.

0
source

Source: https://habr.com/ru/post/1705738/


All Articles