Search code examples
javainheritancepolymorphism

How to make some methods from superclass not avaliable in child class


Lets say I have a class

public class Base {}

and a child class

public class Derived extends Base {

    public void Foo(Object i){
        System.out.println("derived - object");
    }
}

and main class

public class Main {
    public static void main(String[] args) {
        Derived d = new Derived();
        int i = 5;
        d.Foo(i);
    }
}

In console we will see derived - object

Some time later I want to modify my superclass like this :

public class Base {

    public void Foo(int i) {
        System.out.println("base - int");
    }
}

Now if I run my programm I will see:

base - int

So can I make a method in superclass not avaliable in my child class? In result I want to see derived - object.

I see some don't understand what I want so I'll try to explain:

I want to modify only superclass and I don't want to modify my child class.. for example if I will make jar with my superclass and jar with my childs. I don't want to change all jars.. I want to add method into superclass and make it avaliable for superclass.. And such code

    public class Main {
    public static void main(String[] args) {
        Derived d = new Derived();
        int i = 5;
        d.Foo(i);
        Base b = new Base();
        b.Foo(i);
    }
}

give me

derived - object base - int


Solution

  • You should use following signature for Foo method in base class:

    public void Foo(Object i) {
        System.out.println("base - int");
    }
    

    This way you can override method Foo from base class. Now you do not override this method but overload it instead.

    If you want to use public void Foo(int i) signature in your base class then you can define Foo method in base class as private.

    PS: I hope that I've understood you.