Java - какая функция вызывается, когда все наследование, полиморфизм, перегрузка и переопределение задействованы?

В этом конкретном случае std :: string имеет метод c_str, который возвращает const char *. Вы можете сделать параллельную версию C, а затем сделать свой C ++ что-то вроде:

void Read_wav::read_wav(const string &filename)
{
    do_read_wav(internal_read_wav, filename.c_str());
}

, где do_read_wav - ваша подпрограмма C, а internal_read_wav - указатель на структуру C-стиля.

void do_read_wav(struct Read_wav rw, const char * filename)

Теперь, если вы храните информацию в классе, вам нужно создать C struct [все поля должны быть POD и т. д.]

1
задан Karan Bijani 18 March 2019 в 17:37
поделиться

2 ответа

Заявленный тип a - A.

У A есть только два метода: один принимает A (и b и c являются экземплярами A), а другой - D (и ни b, ни c не являются экземплярами D).

Итак, первый метод соответствует, а второй нет. Таким образом, первый метод выбирается компилятором.

Этот метод переопределен в B, и конкретный тип a - B, поэтому печатается «B и A».

Метод B.show(B) не переопределяет метод A.show(A), поскольку он не принимает тот же тип, что и аргумент.

0
ответ дан JB Nizet 18 March 2019 в 17:37
поделиться

Здесь есть две концепции: одна - перегрузка, а другая - переопределение. Когда вы создаете A a = new B (); это означает, что объект B и имеет тип A. Поэтому, когда выполняется a.show (a), он сначала встречает метод show (A obj) и show (B obj) класса A, а затем сопоставляет параметр с типом A, но «a» является экземпляром B, поэтому метод show (A obj) класса B.

Теперь, когда a.show (c) выполняется, он сначала сталкивается с методами show (A obj) и show (B obj) класса A, а затем не находит соответствия с параметром типа C внутри класса A, но все же он выполняется потому, что класс C расширяет B, а B расширяет A.

Короче говоря, мы можем сказать, что a.show (a) эквивалентен a.show (b) и эквивалентен a. шоу (с).

0
ответ дан ARIJIT SENGUPTA 18 March 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: