Call super
ಕಾಲ್ ಸೂಪರ್ ಎಂಬುದು ಕೆಲವು ಆಬ್ಜೆಕ್ಟ್-ಓರಿಯೆಂಟೆಡ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗಳ ಕೋಡ್ ವಾಸನೆ ಅಥವಾ ವಿರೋಧಿ ಮಾದರಿಯಾಗಿದೆ. ಕಾಲ್ ಸೂಪರ್ ಒಂದು ವಿನ್ಯಾಸ ಮಾದರಿಯಾಗಿದ್ದು, ಇದರಲ್ಲಿ ಒಂದು ನಿರ್ದಿಷ್ಟ ವರ್ಗವು ವ್ಯುತ್ಪನ್ನ ಉಪವರ್ಗದಲ್ಲಿ, ಬಳಕೆದಾರರು ಒಂದು ವಿಧಾನವನ್ನು ಅತಿಕ್ರಮಿಸಬೇಕಾಗುತ್ತದೆ ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಹಂತದಲ್ಲಿ ಅತಿಕ್ರಮಿಸಿದ ಕಾರ್ಯವನ್ನು ಮರಳಿ ಕರೆಯಬೇಕಾಗುತ್ತದೆ. ಅತಿಕ್ರಮಿಸಿದ ವಿಧಾನವು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಅಪೂರ್ಣವಾಗಿರಬಹುದು ಮತ್ತು ನಿಗದಿತ ರೀತಿಯಲ್ಲಿ ಅದರ ಕಾರ್ಯವನ್ನು ಹೆಚ್ಚಿಸಲು ಅತಿಕ್ರಮಿಸುವ ವಿಧಾನವನ್ನು ಅವಲಂಬಿಸಿರಬಹುದು. ಆದಾಗ್ಯೂ, ಈ ಕರೆಯಲ್ಲಿ ಸೂಚಿಸಲಾದ ಎಲ್ಲಾ ಷರತ್ತುಗಳನ್ನು ಜಾರಿಗೆ ತರಲು ಭಾಷೆಗೆ ಸಾಧ್ಯವಾಗದಿರಬಹುದು ಎಂಬ ಅಂಶವು ಇದನ್ನು ಮಾದರಿ-ವಿರೋಧಿ ಮಾಡುತ್ತದೆ. ವಿವರಣೆ ಆಬ್ಜೆಕ್ಟ್-ಓರಿಯೆಂಟೆಡ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ನಲ್ಲಿ, ಬಳಕೆದಾರರು ಉಪವರ್ಗಗಳಲ್ಲಿ ಸೂಪರ್ಕ್ಲಾಸ್ನ ಗುಣಲಕ್ಷಣಗಳು ಮತ್ತು ನಡವಳಿಕೆಯನ್ನು ಆನುವಂಶಿಕವಾಗಿ ಪಡೆಯಬಹುದು. ಒಂದು ಉಪವರ್ಗವು ತನ್ನ ಸೂಪರ್ಕ್ಲಾಸ್ನ ವಿಧಾನಗಳನ್ನು ಅತಿಕ್ರಮಿಸಬಹುದು, ಸೂಪರ್ಕ್ಲಾಸ್ನ ಅನುಷ್ಠಾನಕ್ಕಾಗಿ ತನ್ನದೇ ಆದ ವಿಧಾನದ ಅನುಷ್ಠಾನವನ್ನು ಬದಲಿಸಬಹುದು. ಕೆಲವೊಮ್ಮೆ ಅತಿಕ್ರಮಿಸುವ ವಿಧಾನವು ಸೂಪರ್ಕ್ಲಾಸ್ನಲ್ಲಿನ ಅನುಗುಣವಾದ ಕಾರ್ಯವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬದಲಾಯಿಸುತ್ತದೆ, ಆದರೆ ಇತರ ಸಂದರ್ಭಗಳಲ್ಲಿ ಸೂಪರ್ಕ್ಲಾಸ್ನ ವಿಧಾನವನ್ನು ಇನ್ನೂ ಅತಿಕ್ರಮಿಸುವ ವಿಧಾನದಿಂದ ಕರೆಯಬೇಕು. ಆದ್ದರಿಂದ, ಹೆಚ್ಚಿನ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗಳು ಅದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಸೂಪರ್ಕ್ಲಾಸ್ನಲ್ಲಿ ಅತಿಕ್ರಮಿಸಿದ ವಿಧಾನವನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಕರೆಯಬೇಕು. ಕಾಲ್ ಸೂಪರ್ ಆಂಟಿ-ಪ್ಯಾಟರ್ನ್ ಒಂದು ನಿರ್ದಿಷ್ಟ ವರ್ಗದಿಂದ ಉಪವರ್ಗವನ್ನು ಪಡೆಯಲು ಇಂಟರ್ಫೇಸ್ ಅಥವಾ ಫ್ರೇಮ್ವರ್ಕ್ನ ಬಳಕೆದಾರರನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ, ಒಂದು ನಿರ್ದಿಷ್ಟ ವಿಧಾನವನ್ನು ಅತಿಕ್ರಮಿಸುತ್ತದೆ ಮತ್ತು ಅತಿಕ್ರಮಿಸುವ ವಿಧಾನದಿಂದ ಮೂಲ ವಿಧಾನವನ್ನು ಕರೆಯಲು ಅತಿಕ್ರಮಿಸಿದ ವಿಧಾನದ ಅಗತ್ಯವಿರುತ್ತದೆಃ ಇದು ಹೆಚ್ಚಾಗಿ ಅಗತ್ಯವಾಗಿರುತ್ತದೆ, ಏಕೆಂದರೆ ಸೂಪರ್ಕ್ಲಾಸ್ ವರ್ಗ ಅಥವಾ ಫ್ರೇಮ್ವರ್ಕ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಕೆಲವು ಸೆಟಪ್ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸಬೇಕು, ಅಥವಾ ಸೂಪರ್ಕ್ಲಾಸ್ನ ಮುಖ್ಯ ಕಾರ್ಯವನ್ನು (ಈ ವಿಧಾನದಿಂದ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ) ಉಪವರ್ಗದಿಂದ ಮಾತ್ರ ವರ್ಧಿಸಲಾಗುತ್ತದೆ. ಪೋಷಕರಿಗೆ ಕರೆ ಮಾಡುವುದು ವಿರೋಧಿ ಮಾದರಿಯಾಗಿದೆ. ನೈಜ ಕೋಡ್ನಲ್ಲಿ ಅನೇಕ ಉದಾಹರಣೆಗಳಿವೆ, ಅಲ್ಲಿ ಉಪವರ್ಗದಲ್ಲಿನ ವಿಧಾನವು ಇನ್ನೂ ಸೂಪರ್ಕ್ಲಾಸ್ನ ಕಾರ್ಯವನ್ನು ಬಯಸಬಹುದು, ಸಾಮಾನ್ಯವಾಗಿ ಇದು ಮೂಲ ಕಾರ್ಯವನ್ನು ಮಾತ್ರ ಹೆಚ್ಚಿಸುತ್ತದೆ. ಅದು ಕಾರ್ಯವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬದಲಾಯಿಸುತ್ತಿದ್ದರೂ ಸಹ ಅದು ಇನ್ನೂ ಮೂಲ ವರ್ಗಕ್ಕೆ ಕರೆ ಮಾಡಬೇಕಾಗಿದ್ದರೆ, ಆ್ಯಂಟಿ-ಪ್ಯಾಟರ್ನ್ ಇರುತ್ತದೆ. ಈ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಒಂದು ಉತ್ತಮ ವಿಧಾನವೆಂದರೆ ಟೆಂಪ್ಲೇಟ್ ವಿಧಾನದ ಮಾದರಿಯನ್ನು ಬಳಸುವುದು, ಅಲ್ಲಿ ಸೂಪರ್ಕ್ಲಾಸ್ ಸಂಪೂರ್ಣವಾಗಿ ಅಮೂರ್ತ ವಿಧಾನವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ಅದನ್ನು ಉಪವರ್ಗಗಳು ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕು ಮತ್ತು ಮೂಲ ವಿಧಾನವನ್ನು ಆ ವಿಧಾನ ಎಂದು ಕರೆಯಬೇಕುಃ ಭಾಷಾ ವ್ಯತ್ಯಾಸ ಪ್ರೋಗ್ರಾಂಗಳಲ್ಲಿ ಈ ವಿರೋಧಿ ಮಾದರಿಯ ನೋಟವು ಸಾಮಾನ್ಯವಾಗಿ ಏಕೆಂದರೆ ಕೆಲವು ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗಳು ಸೂಪರ್ ವಿಧಾನವನ್ನು ವ್ಯುತ್ಪನ್ನ ವರ್ಗದಿಂದ ಕರೆಯಲಾಗಿದೆಯೆ ಎಂದು ಒಪ್ಪಂದಕ್ಕೆ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಒಂದು ವೈಶಿಷ್ಟ್ಯವನ್ನು ಒದಗಿಸುತ್ತವೆ. ಸಾಕಷ್ಟು ಆಮೂಲಾಗ್ರ ಶೈಲಿಯಲ್ಲಿ ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಹೊಂದಿರುವ ಒಂದು ಭಾಷೆಯು ಬೀಟಾ ಆಗಿದೆ. ಈ ವೈಶಿಷ್ಟ್ಯವು ಜಾವಾ ಮತ್ತು ಸಿ + + ನಲ್ಲಿ ಸೀಮಿತ ರೀತಿಯಲ್ಲಿ ಕಂಡುಬರುತ್ತದೆ, ಅಲ್ಲಿ ಚೈಲ್ಡ್ ಕ್ಲಾಸ್ ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಯಾವಾಗಲೂ ಪೇರೆಂಟ್ ಕ್ಲಾಸ್ ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಅನ್ನು ಕರೆಯುತ್ತಾರೆ. ಕಾಮನ್ ಲಿಸ್ಪ್ (ನಿರ್ದಿಷ್ಟವಾಗಿ ಕಾಮನ್ ಲಿಸ್ಪ್ ಆಬ್ಜೆಕ್ಟ್ ಸಿಸ್ಟಮ್) ನಂತಹ ವಿಧಾನಗಳ ಮೊದಲು ಮತ್ತು ನಂತರ ಬೆಂಬಲಿಸುವ ಭಾಷೆಗಳು ಈ ವಿರೋಧಿ ಮಾದರಿಯನ್ನು ತಪ್ಪಿಸಲು ವಿಭಿನ್ನ ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತವೆ. ಉಪವರ್ಗದ ಪ್ರೋಗ್ರಾಮರ್, ಸೂಪರ್ಕ್ಲಾಸ್ನ ವಿಧಾನವನ್ನು ಅತಿಕ್ರಮಿಸುವ ಬದಲು, ಸೂಪರ್ಕ್ಲಾಸ್ನ ವಿಧಾನದ ಮೊದಲು ಅಥವಾ ನಂತರ ಕಾರ್ಯಗತಗೊಳ್ಳುವ ಹೆಚ್ಚುವರಿ ವಿಧಾನವನ್ನು ಒದಗಿಸಬಹುದು. ಅಲ್ಲದೆ, ಸೂಪರ್ಕ್ಲಾಸ್ನ ಪ್ರೋಗ್ರಾಮರ್ ಉಪವರ್ಗದ ಕ್ರಿಯೆಗಳ ಜೊತೆಗೆ ಕಾರ್ಯಗತಗೊಳ್ಳುವ ಭರವಸೆ ನೀಡುವ ವಿಧಾನಗಳ ಮೊದಲು, ನಂತರ ಮತ್ತು ಸುತ್ತಲೂ ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು. ಉದಾಹರಣೆ ವೀಡಿಯೊ ಬಾಡಿಗೆ ಅಂಗಡಿಯ ದಾಸ್ತಾನು ಬಗ್ಗೆ ವರದಿಯನ್ನು ರಚಿಸಲು ಒಂದು ವರ್ಗವಿದೆ ಎಂದು ಭಾವಿಸೋಣ. ಪ್ರತಿ ನಿರ್ದಿಷ್ಟ ಅಂಗಡಿಯು ಪ್ರಸ್ತುತ ಲಭ್ಯವಿರುವ ವೀಡಿಯೊಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡುವ ವಿಭಿನ್ನ ವಿಧಾನವನ್ನು ಹೊಂದಿದೆ, ಆದರೆ ಅಂತಿಮ ವರದಿಯನ್ನು ರಚಿಸುವ ಕ್ರಮಾವಳಿ ಎಲ್ಲಾ ಮಳಿಗೆಗಳಿಗೆ ಒಂದೇ ಆಗಿರುತ್ತದೆ. ಕರೆ ಸೂಪರ್ ಆಂಟಿ-ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಬಳಸುವ ಚೌಕಟ್ಟು ಈ ಕೆಳಗಿನ ಅಮೂರ್ತ ವರ್ಗವನ್ನು ಒದಗಿಸಬಹುದು (ಸಿ #ನಲ್ಲಿ): ಅಮೂರ್ತ ವರ್ಗ ರಿಪೋರ್ಟ್ ಜನರೇಟರ್ {ಸಾರ್ವಜನಿಕ ವರ್ಚುವಲ್ ರಿಪೋರ್ಟ್ ಕ್ರಿಯೇಟ್ ರಿಪೋರ್ಟ್ () {// ಸಾಮಾನ್ಯ ವರದಿಯ ವಸ್ತುವನ್ನು ರಚಿಸಿ//. ಹೊಸ ವರದಿಯನ್ನು ಹಿಂತಿರುಗಿಸಿ (.);} ವರ್ಗದ ಬಳಕೆದಾರರು ಈ ರೀತಿಯ ಉಪವರ್ಗವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ನಿರೀಕ್ಷೆಯಿದೆಃ ವರ್ಗ ಕಾಂಕ್ರೀಟ್ ರಿಪೋರ್ಟ್ ಜನರೇಟರ್ಃ ರಿಪೋರ್ಟ್ ಜನರೇಟರ್ {ಸಾರ್ವಜನಿಕ ಮೇಲ್ವಿಚಾರಣೆ ವರದಿ ರಚಿಸಿ ವರದಿ ()// ಸ್ಟೋರ್-ನಿರ್ದಿಷ್ಟ ರೀತಿಯಲ್ಲಿ ಡೇಟಾವನ್ನು ಟ್ಯಾಬುಲೇಟ್ ಮಾಡಿ//.///ಈ ವರ್ಗದ ವಿನ್ಯಾಸಕ್ಕೆ ಮೂಲ ರಚಿಸಿ ವರದಿ () ಕಾರ್ಯವನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಕಾರ್ಯದ// ಕೊನೆಯಲ್ಲಿ ಕರೆಯಬೇಕಾಗುತ್ತದೆ. ಆದರೆ ಈ ಸಾಲನ್ನು ಸುಲಭವಾಗಿ ಬಿಟ್ಟುಬಿಡಬಹುದು, ಅಥವಾ// ಹಿಂತಿರುಗಿಸಿದ ವರದಿಯನ್ನು ಕರೆಯ ನಂತರ ಮತ್ತಷ್ಟು ಮಾರ್ಪಡಿಸಬಹುದು, ಇದು ವರ್ಗದ ವಿನ್ಯಾಸ// ಮತ್ತು ಪ್ರಾಯಶಃ ಕಂಪನಿಯಾದ್ಯಂತದ ವರದಿಯ ಸ್ವರೂಪವನ್ನು ಉಲ್ಲಂಘಿಸುತ್ತದೆ. ರಿಟರ್ನ್ base.CreateReport ();} ಒಂದು ಆದ್ಯತೆಯ ಇಂಟರ್ಫೇಸ್ ಈ ರೀತಿ ಕಾಣುತ್ತದೆಃ ಅಬ್ಸ್ಟ್ರಾಕ್ಟ್ ಕ್ಲಾಸ್ ರಿಪೋರ್ಟ್ ಜನರೇಟರ್ {ಪಬ್ಲಿಕ್ ರಿಪೋರ್ಟ್ ಕ್ರಿಯೇಟ್ ರಿಪೋರ್ಟ್ () {ಟ್ಯಾಬುಲೇಟ್ ();// ಜನರಲ್ ರಿಪೋರ್ಟ್ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಜನರೇಟ್ ಮಾಡಿ//. ರಿಟರ್ನ್ ನ್ಯೂ ರಿಪೋರ್ಟ್ (.);} ಪ್ರೊಟೆಕ್ಟೆಡ್ ಅಬ್ಸ್ಟ್ರಾಕ್ಟ್ ವಾಯ್ಡ್ ಟ್ಯಾಬುಲೇಟ್ ();} ಅನುಷ್ಠಾನವು ಈ ವರ್ಗವನ್ನು ಈ ರೀತಿ ಅತಿಕ್ರಮಿಸುತ್ತದೆಃ ಕ್ಲಾಸ್ ಕಾಂಕ್ರೀಟ್ ರಿಪೋರ್ಟ್ ಜನರೇಟರ್ಃ ರಿಪೋರ್ಟ್ ಜನರೇಟರ್ {ಪ್ರೊಟೆಕ್ಟೆಡ್ ಓವರ್ ರೈಡ್ ವಾಯ್ಡ್ ಟ್ಯಾಬುಲೇಟ್ () {// ಸ್ಟೋರ್-ನಿರ್ದಿಷ್ಟ ರೀತಿಯಲ್ಲಿ ಟ್ಯಾಬುಲೇಟ್ ಡೇಟಾವನ್ನು ಟ್ಯಾಬುಲೇಟ್ ಮಾಡಿ//.