I working on a huge code base which has a huge class with many private members and public and private methods. I want to create a derived class from this base class that will have all same members and methods, except that one of its public methods will have a line commented. How can I do that?
I thought of overriding that method, but that method accesses many private members of the base class.
Below is the skeleton of what I want to do.
public class Base {
private var1;
private var2;
public toBeOverriden(){
processA(var1);
processB(var1);
processC(var1); // needs to be commented
processD(var2);
processE(var2);
}
}
Ideally I would like to do -
public class Derived extends Base{
@Override
public toBeOverriden(){
processA(var1);
processB(var1);
processD(var2);
processE(var2);
}
}
This is not possible because I cannot access private variables of the base class. Is there anything I can do without making all private members protected? Please note that overriding processC()
to empty is not an option because it can be used by other non-overriden methods.
Another option:
public class Base {
private var1;
private var2;
public toBeOverriden(){
doMethodA();
doMethodB();
doMethodC();
doMethodD();
doMethodE();
}
protected void doMethodA(){ processA(var1); }
protected void doMethodB(){ processA(var1); }
protected void doMethodC(){ processA(var1); }
protected void doMethodD(){ processA(var2); }
protected void doMethodE(){ processA(var2); }
}
public class Derived extends Base{
@Override
public toBeOverriden(){
doMethodA();
doMethodB();
doMethodD();
doMethodE();
}
}
This is "basically" a delegate for every method you need to call. You can change it to better methods that really do a job, like:
public void doSomething(){
processA(var1);
processB(var1);
}
If you have access to the base class you can start by making a new method that does what you want, such as correctedToBeOverridden()
. Then from your extended class, override toBeOverridden()
and just have it call correctedToBeOverridden()
.
correctedToBeOverridden(){
processA(var1);
processB(var1);
processD(var2);
processE(var2);
}
@Override
toBeOverridden() {
correctedToBeOverridden();
}
Another option is to make Derived a nested class within Base to give it access to private variables:
public class Base {
private int var1;
private int var2;
private void processA(int a){}
private void processB(int a){}
private void processC(int a){}
private void processD(int a){}
private void processE(int a){}
public void toBeOverriden(){
processA(var1);
processB(var1);
processC(var1); // needs to be commented
processD(var2);
processE(var2);
}
public class Derived extends Base{
@Override
public void toBeOverriden(){
processA(var1);
processB(var1);
//processC(var1); // needs to be commented
processD(var2);
processE(var2);
}
}
}
However, the instantiation of Derived will look like this:
Base.Derived derived = new Base().new Derived();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.