Спадкування – Рибка Теж Домашнє Тварина

І все – таки, всі вони сплять, їдять, і мають зріст і вагу Тому набагато легше створити клас Fish (риба) так, щоб він успадкував загальні риси і поведінку у класу Pet, ніж щоразу створювати з початку класи для собак, папуг і риб Для цього й існує спеціальне ключове слово extends:

Тепер ви маєте повне право сказати що Fish – цепідклас класу Pet, а клас Pet – цесупер — клас класу Fish Ми використовували клас Pet, як свообразний шаблон для створення класу Fish class Fish extends Pet{

}

Навіть якщо ви залишите клас Fish таким, як він є зараз, все одно вже можна використовувати кожен метод і атрибут, успадкований з класу Pet Ось подивіться: Fish myLittleFish = new Fish()

myLittleFishsleep()

Хоч ми ще й не оголошували жодних методів в класі Fish, вже можновизивать метод sleep (), що знаходиться в його супер – класі

Немає нічого легше створення підкласів в додатку Eclipse Виберіть меню File, New, Class і надрукуйте слово Fish, як імя класу Замініть у поле супер – клас javalangObject на слово Pet

Не забувайте, що ми створюємо підклас класу Pet, щоб додати те, що притаманне тільки рибам, а загальний для всіх тварин код, оголошений в супер – класі, ми просто використовуємо Не всі домашні тварини можуть пірнати, але рибки, звичайно ж, можуть Давайте додамо до класу Fish метод dive () – нирніУ методу dive () є параметр howDeep, який говорить рибку, як глибоко вона повинна пірнути А ще ми оголосили змінну currentDepth, куди будемо поміщати поточне значення глибини при кожному виклику методу dive () Цей метод повертає значення змінної currentDepth зухвалому класу Зробіть, будь ласка, ось такий клас FishMaster:

Пора розповісти маленький секрет – всі класи в мові Java успадковані з супер – дупер класу Object, навіть якщо ви і не використали ключове слово extendsВ відміну від людей, Java – класи не можуть мати двох батьків А якби у нас це було як у мові Java, діти не були б подклассами своїх батьків, а всі хлопчики відбувалися б від Адама, а дівчатка – від Єви ☺

public class Fish extends Pet {

int currentDepth=0

public int dive(int howDeep) {currentDepth = currentDepth + howDeep Systemoutprintln (Пірнаю на глибину

+ HowDeep + футів ) Systemoutprintln (Я на глибині

+ CurrentDepth + футів нижче рівня моря )

return currentDepth

}

}

Метод main () у класі FishMaster створює екземпляр обєкта Fish і двічі викликає його метод dive () з різними параметрами Після цього він викликає метод sleep ()public class FishMaster {

public static void main(String[] args) { Fish myFish = new Fish() myFishdive(2)

myFishdive(3)

}

}

myFishsleep()

Під час виконання FishMaster надрукує наступне: Пірнаю на глибину 2 футів

Я на глибині 2 футів нижче рівня моря

Пірнаю на глибину 3 футів

Я на глибині 5 футів нижче рівня моря

На добраніч, до завтраВи помітили, що FishMaster викликає не тільки методи оголошені в класі Fish, але також і метод sleep () його супер – класу Pet Те — то У цьому і є вся принадність спадкування – вам не потрібно копіювати код з класу Pet Просто напишіть слово extends і клас Fish зможе користуватися методами класу Pet

Так, ось ще що, хоча метод dive () і повертає значення змінної currentDepth, наш FishMaster ним не користується Це не біда, просто нашому класу FishMaster воно не потрібно Але яким — нибудь інших класів, які теж можуть працювати з класом Fish, це значення може бути дуже навіть корисно Уявіть, наприклад, клас FishTrafficDispatcher (регулювальник руху риб), який повинен знати положення інших риб у море, перш ніж дозволити пірнання щоб уникнути дорожньо – транспортних пригод ☺Перевизначення методівВи, звичайно, знаєте, що риби не говорять (принаймні він не роблять це голосно) Але наш клас Fish був успадкований з класу Pet, у якого є метод say () Це означає, що ви безперешкодно можете написати що – то в цьому роді:

myFishsay()

Ну і ну, наші рибки заговорили .. Щоб уникнути цього, в класі Fish потрібно перевизначити (override) метод say (), ОБЬЯВЛЕНИЯ в класі Pet Це працює так: якщо ви розкажете в під – класі метод має точно такий – же заголовок, як у його – ж супер – класі, Java виконає метод під – класу, замість методу супер – класу Давайте додамо до класу Fish метод say ()

public String say(String something){

return Ти чо не знаєш, що риби не розмовляють”;

}

А тепер викличемо метод say () з методу main () класу FishMaster:

myFishsay (Привіт)

Виконайте цю програму і вона надрукує наступне:

Ти чо не знаєш, що риби не розмовляють

Це підтверджує, що метод say () класу Pet був перевизначений Ось це так Ми вивчили багато нового в цій главі – давайте перепочинемо Якщо заголовок методу включає ключове слово final, такий методпереопределіть не можна, наприклад:

final public void sleep(){…}

Додаткове читання

1Java  Data Types:

http://javasuncom/docs/books/tutorial/java/nutsandbolts/da tatypeshtml

2About  inheritance: http://javasuncom/docs/books/tutorial/java/concepts/inherit ancehtml

Практичні вправи

1 Створіть новий клас Car (автомобіль) івключіте в нього такі методи:

public void start()

public void stop()

public int drive(int howlong)

Метод drive () (їдь) повинен повертати загальна відстань пройдена автомобілем за заданий час Використовуйте наступну формулу дла рассчета відстані:

distance = howlong*60

2 Створіть ще один клас CarOwner (господар автомобіля), який створюватиме екземпляр обєкта Car і викликати його методи Результат кожного такого виклику повинен бути надрукований за допомогою Systemoutprintln ()

Практичні вправи для розумників і розумниць

 

Зробіть підклас класу Car, назвіть його JamesBondCar (автомобіль Джемса Бонда) і перевизначите в ньому метод drive () Використовуйте наступну формулу дла рассчета відстані:

distance = howlong*180

Будьте винахідливі Печатайтесмешние

Джерело: Java Programming for Kids, Parents and Grandparents by Yakov Fain

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*