i have an abstract class BaseClass with a public insert() method:
public abstract class BaseClass {
public void insert(Object object) {
// Do something
}
}
which is extended by many other classes. For some of those classes, however, the insert() method must have additional parameters, so that they instead of overriding it I overload the method of the base class with the parameters required, for example:
public class SampleClass extends BaseClass {
public void insert(Object object, Long param){
// Do Something
}
}
Now, if i instantiate the SampleClass class, i have two insert() methods:
SampleClass sampleClass = new SampleClass();
sampleClass.insert(Object object);
sampleClass.insert(Object object, Long param);
what i’d like to do is to hide the insert() method defined in the base class, so that just the overload would be visible:
SampleClass sampleClass = new SampleClass();
sampleClass.insert(Object object, Long param);
Could this be done in OOP?
There is no way of hiding the method. You can do this:
but that’s it.
The base class creates a contract. All subclasses are bound by that contract. Think about it this way:
How is that code meant to know that it doesn’t have an
insert(Object)method? It can’t.Your problem sounds like a design problem. Either the classes in question shouldn’t be inheriting from the base class in question or that base class shouldn’t have that method. Perhaps you can take
insert()out of that class, move it to a subclass and have classes that needinsert(Object)extend it and those that needinsert(Object, Object)extend a different subclass of the base object.