I have a question about this code:

```
    public class Musician {
        private String name;
        public String instrument;
        public Musician(String name, String instrument){
          this.name= name;
          this.instrument= instrument;
        }

        public String getInstrument() {
            return instrument; 
            }

        public String getName() {
            return name;
            }

        private String getClassName(){
            return "Musician ";
        }

        public void play(){
           System.out.println("[M] "+getClassName() + " plays music.");
        }

        public void printInfo(){
          play();
          System.out.println("[M] Class name: "+ getClassName());
          System.out.println("[M] Instrument: "+ getInstrument());
        }
    }

    public class RockMusician extends Musician{
        public String instrument;

        public RockMusician(String name, String instrument) {
            super(name, instrument);
            this.instrument= instrument + " and drums";
         }

        public String getClassName(){
            return " RockMusician ";
            }

        public void play(){
            System.out.println("[RM] "+ getClassName() + getName() + " breaks his "+ super.getInstrument() + "!");
        }
    }

public class IsraelyRockMusician extends RockMusician {
      public IsraelyRockMusician(String name, String instrument) {
            super(name, instrument);
           }
        public String getInstrument() {
            return instrument;
            }
        public String getName(){
            return super.getName() + " the king";
            }
        public String getClassName() {
            return " IsraelyRockMusician ";
            }

}

public class Testing {
        public static void func(Musician m){
                System.out.println("I've got a musician!");
        }
        public static void func(RockMusician m){
                System.out.println("I've got a rock musician!");
        }
        public static void main(String[] args) {
            Musician m3 = new IsraelyRockMusician("Chanoch", "guitar");
            m3.printInfo();
        }
}

```

I have IsraeliRockMusician who inherits RockMusician who Inherits Musician,
I then make a Musician m3 with the name "chanoch" and instrument "guitar"

and I active the method, print Info,
because the printInfo is in the father -> RockMusician which contains 3 methods on itself-> play(),getClassName(),and getInstrument(),

my question is, when the method showinfo runs, play is going all the way to the overwriten method and prints "[RM] IsraelyRockMusician Chanoch the king breaks his guitar!",
now this is fine, but the next line is "[M] Class name: Musician ", which means the getClassName was given "Musician" and Im asking why its not "IsraeliRockMusician" since the method was overwritten.

I'm sorry if the question is a bit hazey.