21

Re: Інтерфейс

хіба можна передавати параметру метода цілий об'єкт?

Чому ні? Ніхто не заважає цього робити. Тим паче, якщо тип параметру - клас, з якого наслідує і об'єкт "Людина" і "Папуга"

22

Re: Інтерфейс

LoganRoss написав:

у вас повинна бути одна функція

make_speak(<Щось> speaker)

, що реалізується і для людини, і для папуги. Одна функція для двох об'єктів.
P.S. Підказка: об'єкти похідного класу також є об'єктами базового класу.

Дякую за підказку, але всеодно нічого в голову не приходить  *DONT_KNOW* напевно подумаю над цим завтра  :)

23

Re: Інтерфейс

Zolin_777 написав:

хіба можна передавати параметру метода цілий об'єкт

Звісно, і навіть більше. Я вам зараз відкрию таємницю: коли ви пишете

object.method(parameter1,parameter2);

насправді* викликається

method(object,parameter1,parameter2);

Перший параметр методу - неявний - доступний у ньому під ім'ям this і може використовуватися неявно.

Тільки треба враховувати, що об'єкти в Java передаються, на відміну від звичайних величин, за посиланням, тобто у метод передається адреса об'єкту, і його можна змінювати:

void setValue(int a)//a приймає значення типу int
{
  a=5;
}
...
int b=3;
setValue(b);//b лишилося 3, значення a нікуди з методу не пішло
...
void setName(Mammal m)//m - посилання на об'єкт, а не його значення
{
  m.name="Rabbit";
}
...
Mammal m=new Mammal;
m.name="Crow";
setName(m);//тепер m.name.equals("Rabbit")!

Саме тому, до речі, рядки порівнюються за допомогою методу equals - простий == порівнює посилання, тобто чи посилаються обидві змінні на один і той самий об'єкт.
---
*насправді я проігнорував таблицю віртуальних функцій, але зараз це взагалі підірве вам мозок :)

24

Re: Інтерфейс

Насправді, досить топорний приклад як на навчальне завдання. Вас вимушують створити інтерфейс, наприклад:

interface Soundable {
   void makeSound();
}

Який треба імплементувати Людиною та Папугою. Потім написати метод, що буде приймати об'єкт типу Soundable і викликати на ньому makeSound().

Подякували: Zolin_7771

25

Re: Інтерфейс

LoganRoss написав:

у вас повинна бути одна функція

make_speak(<Щось> speaker)

, що реалізується і для людини, і для папуги. Одна функція для двох об'єктів.
P.S. Підказка: об'єкти похідного класу також є об'єктами базового класу.

зробити клас в якому буде

public void make_speak(назва мого класу speaker)
{
    обєкт на людину
   обєкт на папугу
    speaker.speak();
}

потім в головному класу визвати обєкт на цей клас? не розумію...  *WALL* або просто я цього ще не знаю...

26

Re: Інтерфейс

koala написав:
Zolin_777 написав:

хіба можна передавати параметру метода цілий об'єкт

Звісно, і навіть більше. Я вам зараз відкрию таємницю: коли ви пишете

object.method(parameter1,parameter2);

насправді* викликається

method(object,parameter1,parameter2);

Можна пруф? Цікаво.
Здається це не кейс для джави.

Подякували: Zolin_777, leofun012

27 Востаннє редагувалося fed_lviv (28.04.2017 09:48:31)

Re: Інтерфейс

koala написав:

...але зараз це взагалі підірве вам мозок


Мені ця тема "Інтерфейс", більш схожа на гвалтування.

Zolin_777 написав:

...а от ця строчка  speaker.speak(); взагалі не в'яжиться нікуда....
По плану Speaker повинен бути класом щоб так визивати метод? нічого не розумію...
...але я не зрозумів як це працює, хіба можна передавати параметру метода цілий об'єкт?...
...але всеодно нічого в голову не приходить...
...не розумію...  *WALL* або просто я цього ще не знаю...

Шановний Zolin_777, навіщо Ви мучаєте себе, виберіть якусь одну книгу і послідовно читайте сторінку за сторінкою, не поспішаючи.

Подякували: koala, Zolin_7772

28

Re: Інтерфейс

LoganRoss написав:

P.S. Підказка: об'єкти похідного класу також є об'єктами базового класу.

Це тут ні до чого, я спеціально написав, що у базовому класі має бути лише два методи void movers() та void voice().

Zolin_777
Якщо ви уже взялися вивчати інтерфейси, то беріть книгу та вивчайте. Бо послідовний перебір усіх можливих рядків коду дасть вам результат років через сто.

Подякували: LoganRoss1