Создать метод в подклассе, который выводит метод из суперкласса?

1

У меня есть два класса: Send (суперкласс) и Message (подкласс). Я хочу создать метод под названием Summary который печатает имя пользователя (находится в суперклассе).

Я создал метод в классе getName, называемом getName, однако я не уверен, как выполнить задачу.

Send класс:

public class Send {
    private String username;

    public static void main(String[] args) {

    }

    public void getName(){
        username = "Adam";
    }
}

Класс Message:

public class Message extends Send {
    private String message;

    public void summary(){
        System.out.println("Message post from" + getName());
    }
}
  • 0
    Я прошу прощения за макет, я не совсем уверен, что случилось.
  • 0
    Отредактируйте, выберите свой код и нажмите кнопку {} , чтобы отформатировать как код.
Показать ещё 4 комментария
Теги:
inheritance
superclass
subclass

3 ответа

1

Ваш getter на самом деле статичный setter я думаю, вы хотите заменить

public void getName(){
    username = "Adam";
}

С

public String getName(){
    return this.username;
}

А также

public void setName(final String pUsername)
{
    this.username = pUsername;
}

Тогда где-то звоните

super.setName("aNameToGive");

а также

System.out.println(super.getName());

Распечатал aNameToGive

Кроме того, ваш дизайн довольно странный. Я думаю, вы хотите поставить свой main в классе Message. Затем оттуда инициируйте constructor, затем в конструкторе вызовите новые методы. Если вы хотите вызвать методы из main вам придется изменить все на static но это было бы вредно для такого рода работ.

Что-то вроде

public class Message extends Send {
    private String message;

    public Message(){
        super.setName("Adam");
        System.out.println(super.getName());
    }

    public static void main(String args[])
    {
        new Message();
    }
}

А также

public class Send {
    private String username;

    public void setName(final String pUsername)
    {
        this.username = pUsername;
    }

    public String getName(){
        return this.username;
    }
}
1

В приведенном ниже коде я инициализировал имя пользователя в момент объявления, вы можете изменить это имя, вызвав метод setter в любом другом классе, поскольку этот метод отмечен как открытый (например, что я сделал в классе Test).

Вы можете проверить этот код, запустив класс Test:

Отправить класс:

public class Send {

    private String username = "Adam";


    public String getUsername(){   

        retur username;

    }

    public Void setUsername(String username){ 

        this.username = username;

    }

}

Класс сообщения:

public class Message extends Send {

    private String message;

    public void getSummary(){

        System.out.println("Message post from" + getUsername());

    }

}

Вы можете использовать внешний класс для вызова метода getSummary, как показано ниже, или просто скопировать основной метод и вставить его в свой класс сообщений:

Испытательный класс

public class Test {

    public static void main(String[] args) {


       Message msg = new Message();

       // you can add this method call to change the user name before printing it
       // msg.setUsername("Smith");

       msg.getSummary();

    }

}

NB: я редактировал название вашего метода, чтобы следовать правилам именования

  • 0
    Он мог бы получить желаемый результат, но это не научит ОП вообще хорошему дизайну. Почему бы не сказать ему удалить все и вызвать System.out.println("Adam"); в main тогда?
  • 0
    я постараюсь улучшить свой ответ, но я предположил, что, потому что это может помочь ему понять наследство больше
Показать ещё 2 комментария
0

Поместите свой основной статический void в метод сообщения и метод суммирования вызовов из этого метода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню