Не находит метод класса

Подскажите пожалуйста, почему компилятор не находит метод messwithCat(), хотя предыдущий метод getName() выполняеться

public class Main
{
   
    public static void main(String[] args)
    {
        Cat cat1 = new Cat ("Jimbo");
        cat1.getName();
        messWithcat(cat1); // why this is not working ?
        cat1.getName();
    }
}

class Cat
{
    
    private String catName;
    
    Cat (String name)
    {
        catName = name;
    }
    
    void getName()
    {
        System.out.println(catName);
    }
    void messWithcat(Cat a)
    {
        a = new Cat ("Kokos");
    }
}

Ответы (2 шт):

Автор решения: Алексей Шиманский

Потому что messWithcat как и getName принадлежит какому-то классу. getName вы вызываете у объекта cat1, а второй...получается у текущего (Main)

→ Ссылка
Автор решения: стасевич

не находит, т.к. надо вызывать метод у обьекта cat1.messWithcat(cat1);, также, как ты вызывал метод cat1.getName();

чтобы данный метод вызывался именно с таким написанием messWithcat(cat1);
то надо метод перенести в класс main и добавить static

class Main {
    static void messWithcat(Cat a) {
        a = new Cat("Kokos");
    }

    public static void main(String[] args) {
        Cat cat1 = new Cat("Jimbo");
        cat1.getName();
        messWithcat(cat1); 
        cat1.getName();
    }
}   

если же оставить его в классе кот, то тоже добавляем static и вызываем через класс Cat.messWithcat(cat1);

далее отвечу на вопрос почему не меняется имя. Если добавить в messWithcat вызов getName

static void messWithcat(Cat a) {
        a = new Cat("Kokos");
        a.getName();
    }  

вывод будет

Jimbo
Kokos
Jimbo    

у тебя класс кот Immutable (неизменяемый, нету сеттера и приватное поле - аналогия класс String) и передавая объект в метод, мы получаем копию ссылки указывающий на обьект в хипе, в методе ты можешь изменять копию обьекта по этой ссылке, но на сам обьект это никак не влияет.

а чтобы изменить обьект, надо изменить метод и в мейне присвоить ссылке возврат из метода

 static Cat messWithcat(Cat a) {
        a = new Cat("Kokos");
        a.getName(); //Kokos
        return a;
    }  

public static void main(String[] args) {
    Cat cat1 = new Cat("Jimbo");
    cat1.getName();
    cat1 = Cat.messWithcat(cat1);
    cat1.getName(); //Kokos
}
→ Ссылка