Middle
299
Ինչպե՞ս կարելի է իրականացնել բազմաբնույթ ժառանգություն Java-ում:
Պատասխան AI-ից
sobes.tech AI
Java-да դասի իրականացման բազմակի ժառանգությունը ուղղակիորեն չի աջակցվում «ռոմբի խնդիր»-ի պատճառով: Սակայն, դրա գործառույթը կարելի է հասնել հետևյալ եղանակներով:
-
Ինտերֆեյսներ: Դասը կարող է իրականացնել մի քանի ինտերֆեյսներ: Ինտերֆեյսները միայն որոշում են մեթոդների սիգնատուրաները, ոչ թե նրանց իրականացմանը:
interface InterfaceA { void methodA(); } interface InterfaceB { void methodB(); } class MyClass implements InterfaceA, InterfaceB { @Override public void methodA() { // methodA իրականացում } @Override public void methodB() { // methodB իրականացում } }Java 8-ով դեֆոլտ մեթոդների հայտնվելուց հետո, ինտերֆեյսները կարող են նաև տրամադրել ըստ նախնական իրականացումների:
interface InterfaceC { default void defaultMethod() { System.out.println("Նախնական իրականացում"); } } class MyClass2 implements InterfaceC { // կարող է օգտագործել defaultMethod-ը կամ վերանվանել } -
Կոմպոզիցիա: Փոխարենը բազմաբաժան դասերից ժառանգելու, դասը կարող է պարունակել այլ դասերի օրինակներ (միավորներ):
class ComponentA { void methodA() { // methodA իրականացում } } class ComponentB { void methodB() { // methodB իրականացում } } class MyClass3 { private ComponentA compA = new ComponentA(); private ComponentB compB = new ComponentB(); public void delegateMethodA() { compA.methodA(); } public void delegateMethodB() { compB.methodB(); } }MyClass3դասը դելեգատոր էcompAևcompBօբյեկտների մեթոդների:
Համեմատություն:
| մեխանիզմ | Իրականացման ժառանգություն | Ռոմբի խնդիր | Գործառույթի ճկունություն |
|---|---|---|---|
| Ինտերֆեյսներ | Չկա (դեֆոլտից առաջ) | Չկա | Բարձր |
| Կոմպոզիցիա | Այո | Չկա | Բարձր |