Middle
302
Kā īstenot daudzveidīgu mantošanu Java?
Atbilde no AI
sobes.tech AI
Java klasēs tiešā realizācijas daudzmantošana nav tieši atbalstīta "romba problēmas" dēļ. Tomēr tās funkcionalitāti var sasniegt ar šādiem veidiem:
-
Saskarnes: Klase var realizēt vairākas saskarnes. Saskarnes definē tikai metožu parakstus, ne to realizāciju.
interface InterfaceA { void methodA(); } interface InterfaceB { void methodB(); } class MyClass implements InterfaceA, InterfaceB { @Override public void methodA() { // methodA realizācija } @Override public void methodB() { // methodB realizācija } }Java 8 ieviešanas laikā, kad parādījās noklusējuma metodes, saskarnes var arī nodrošināt noklusējuma realizācijas.
interface InterfaceC { default void defaultMethod() { System.out.println("Noklusējuma realizācija"); } } class MyClass2 implements InterfaceC { // var izmantot defaultMethod vai pārdefinēt } -
Kompozīcija: Tā vietā, lai mantošanas no vairākām klasēm, klase var saturēt citu klases instancijas (locekļus).
class ComponentA { void methodA() { // methodA realizācija } } class ComponentB { void methodB() { // methodB realizācija } } class MyClass3 { private ComponentA compA = new ComponentA(); private ComponentB compB = new ComponentB(); public void delegateMethodA() { compA.methodA(); } public void delegateMethodB() { compB.methodB(); } }Klase
MyClass3deleģē metožu izsaukumus objektiemcompAuncompB.
Salīdzinājums:
| Mehānisms | Realizācijas mantošana | Romba problēma | Elastīgums |
|---|---|---|---|
| Saskarnes | Nav (pirms default) | Nav | Augsts |
| Kompozīcija | Jā | Nav | Jā |