logo

Јава Ектенд Мултипле Цлассес

Јава је објектно оријентисани програмски језик који омогућава програмерима да креирају сложене софтверске системе. Једна од кључних карактеристика Јаве је наслеђивање, које омогућава класама да наслеђују својства и методе из других класа. У Јави, класа може да прошири само једну родитељску класу истовремено, али је могуће постићи вишеструко понашање слично наслеђивању коришћењем интерфејса. У овом чланку ћемо истражити како проширити више класа у Јави и пружити примере програма са излазом.

Проширивање више класа у Јави

Јава не дозвољава класи да директно прошири више класа. Разлог за ово је да се избегне проблем дијаманта, који се јавља када класа наслеђује две класе које имају заједничку суперкласу. Да би се избегао овај проблем, Јава дозвољава класи да имплементира више интерфејса, који могу постићи сличну функционалност.

Интерфејс је колекција апстрактних метода које дефинишу понашање класе. За разлику од класа, интерфејси се не могу инстанцирати, али их класе могу имплементирати. Имплементацијом интерфејса, класа може да наследи својства и методе из више интерфејса. Омогућава класи да постигне вишеструко понашање налик наслеђивању, без проблема са дијамантом. Да бисмо проширили више класа у Јави, морамо да креирамо интерфејс који садржи својства и методе родитељских класа. Имплементирајућа класа тада може имплементирати интерфејс и наследити својства и методе родитељских класа. Хајде да погледамо пример да боље разумемо овај концепт.

увозни мрав

Проширивање више класа у Јави

У овом примеру ћемо креирати три класе: животиња, сисара и рептила. Затим ћемо креирати интерфејс под називом Омниворе, који ће проширити класе животиња и сисара. Коначно, направићемо класу под називом Платипус, која ће имплементирати интерфејс Омниворе.

Класа Анимал ће садржати метод под називом 'еат' који исписује 'Анимал ис еатинг'. Класа Маммал ће проширити класу Анимал и садржати метод под називом 'дринкМилк' који исписује 'Маммал ис дринкинг милк.' Класа Рептиле ће такође проширити класу Анимал и садржати метод под називом 'лаиЕггс' који штампа 'Рептиле ис лаииинг еггс.'

Ево кода за класу Анимал:

 public class Animal { public void eat() { System.out.println('Animal is eating.'); } } 

Ево кода за класу сисара:

 public class Mammal extends Animal { public void drinkMilk() { System.out.println('Mammal is drinking milk.'); } } 

Ево кода за класу Рептила:

фонт гимп
 public class Reptile extends Animal { public void layEggs() { System.out.println('Reptile is laying eggs.'); } } 

Сада направимо интерфејс Омниворе, који ће проширити класе животиња и сисара:

 public interface Omnivore extends Animal, Mammal { public void eatPlants(); } 

На крају, направимо класу Платипус, која ће имплементирати интерфејс Омниворе:

 public class Platypus implements Omnivore { public void eat() { System.out.println('Platypus is eating.'); } public void drinkMilk() { System.out.println('Platypus is drinking milk.'); } public void eatPlants() { System.out.println('Platypus is eating plants.'); } } 

У овом примеру, класа Платипус имплементира интерфејс Омниворе, који проширује класе Анимал и Маммал. Стога, класа Платипус наслеђује својства и методе и класа Анимал и Маммал.

Хајде да тестирамо наш програм тако што ћемо креирати инстанцу класе Платипус и позвати њене методе:

кор у јава
 public class Main { public static void main(String[] args) { Platypus p = new Platypus(); p.eat(); p.drinkMilk(); p.eatPlants(); } } 

Излаз:

 Platypus is eating. Platypus is drinking milk. Platypus is eating plants. 

Као што видимо, класа Платипус је у стању да наследи својства и методе и класа Анимал и Маммал имплементацијом интерфејса Омниворе. Ово нам омогућава да постигнемо вишеструко понашање слично наслеђивању у Јави.

Када користити вишеструко понашање слично наслеђивању у Јави

Иако је могуће постићи вишеструко понашање слично наслеђивању у Јави користећи интерфејсе, то није увек неопходно или пожељно. У ствари, многи програмери тврде да вишеструко наслеђивање може учинити код сложенијим и тежим за одржавање. Стога је важно пажљиво размотрити да ли је понашање слично вишеструком наслеђу неопходно за ваш програм.

Једна ситуација у којој понашање налик вишеструком наслеђивању може бити корисно је када треба да комбинујете функционалност из више извора. На пример, ако имате две класе које пружају различите типове функционалности, можда ћете желети да их комбинујете у једну класу која наслеђује обе. У овом случају, имплементација интерфејса који проширује обе класе може бити добро решење. Друга ситуација у којој вишеструко понашање слично наслеђивању може бити корисно је када радите са библиотекама независних произвођача које у великој мери користе наслеђивање. Ако треба да проширите више класа независних произвођача, имплементација интерфејса може бити добар начин да се то постигне без стварања сложених хијерархија наслеђивања.

У Јави није могуће директно проширити више класа. Међутим, могуће је постићи вишеструко понашање слично наслеђивању имплементацијом интерфејса који проширују више класа. Ово омогућава класи да наследи својства и методе из више родитељских класа, без проблема са дијамантом који може настати са директним вишеструким наслеђивањем. Иако понашање налик вишеструком наслеђивању може бити корисно у одређеним ситуацијама, важно је пажљиво размотрити да ли је то неопходно за ваш програм. У многим случајевима, коришћење интерфејса и композиције може бити боље решење за комбиновање функционалности из више извора.