logo

האם נוכל לעקוף שיטה סטטית ב-Java?

ב-Java, שׁוֹלֵט ו עומס יתר הן שתי התכונות החשובות ביותר של תכנות מונחה עצמים . התכונה משמשת כאשר המתכנת רוצה להשיג רב צורתיות . השאלה, האם נוכל לעקוף את השיטה הסטטית ב-Java אוֹ האם אתה יכול להעמיס על שיטה סטטית ב-Java הן שתי השאלות החשובות ביותר שנשאלו ב ראיון עם Java . בחלק זה נבין בקצרה עומס יתר ועקיפה. הסברנו גם את התשובה של מדוע איננו יכולים לעקוף את השיטה הסטטית ב-Java?

שיטה סטטית

השיטה שיש לה מילת מפתח סטטית לפני שם השיטה ידועה בשם a שיטה סטטית . זה ידוע גם בתור א שיטה ברמת הכיתה . עותק של השיטה הסטטית משותף לכל האובייקטים של המחלקה.

 public static int sum() { } 

אנו יכולים להפעיל שיטות סטטיות באמצעות שם המחלקה. לדוגמה, Math.abs(a) שיטה . השיטה מחזירה את הערך המוחלט של הארגומנט שעבר. השיטה הסטטית אינה יכולה לגשת למשתני מופע או שיטות.

עקיפת שיטה

זה תכונה של תכנות מונחה עצמים . הוא משמש להשגת פולימורפיזם בזמן ריצה. תת המחלקה מספקת יישום ספציפי של שיטה שכבר מסופקת על ידי מחלקת האב שלה, המכונה עוקף שיטה. החתימה של השיטה בכיתת הורה וילד חייבת להיות זהה. ב עוקף שיטה , איזו שיטה להתבצע, הוחלט בזמן הריצה. ההחלטה מתקבלת לפי האובייקט שקראנו לו.

עומס יתר של שיטה

זה גם תכונה של תכנות מונחה עצמים. הוא משמש להשגת פולימורפיזם בזמן הידור. זה מאפשר לנו להשתמש באותו שם שיטה אבל בחתימות שונות. אם למחלקה יש יותר משיטה אחת עם אותו שם אך חתימת מתודה אחרת, היא ידועה בשם עומס יתר בשיטה .

למדנו מה מעמיס ומכריע. עכשיו נעבור לנקודה.

האם נוכל להעמיס על שיטה סטטית?

התשובה היא כן . אנחנו יכולים להעמיס יתר על המידה שיטות סטטיות. אבל זכור שחתימת השיטה חייבת להיות שונה. לדוגמה, שקול את תוכנית Java הבאה.

OverloadStaticMethodExample1.java

 public class OverloadStaticMethodExample1 { //static method public static void display() { System.out.println('Static method called.'); } //overloaded static method public static void display(int x) { System.out.println('An overloaded static method called.'); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample1.display(); OverloadStaticMethodExample1.display(160); } } 

תְפוּקָה:

 Static method called. An overloaded static method called. 

כאן עולה שאלה ש האם נוכל להעמיס על השיטות אם הן שונות רק לפי מילת מפתח סטטית.

התשובה היא לא. לא נוכל לעקוף שתי שיטות אם הן נבדלות רק לפי מילת מפתח סטטית. לדוגמה, שקול את תוכנית Java הבאה.

OverloadStaticMethodExample2.java

 public class OverloadStaticMethodExample2 { //static method public static void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //non-static method public void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample2.sum(12, 90); } } 

כאשר אנו מקמפלים את התוכנית לעיל, היא מציגה את השגיאה הבאה.

 error: method sum(int,int) is already defined in class OverloadStaticMethodExample2 

האם נוכל לעקוף שיטה סטטית?

לא, איננו יכולים לעקוף שיטות סטטיות מכיוון שעקוף מתודות מבוסס על כריכה דינמית בזמן ריצה והשיטות הסטטיות מקושרות באמצעות כריכה סטטית בזמן הידור. אז, אנחנו לא יכולים לעקוף שיטות סטטיות.

הקריאה למתודה תלויה בסוג האובייקט שקורא למתודה הסטטית. זה אומר:

  • אם נקרא למתודה סטטית באמצעות אובייקט מחלקת האב, המתודה הסטטית המקורית תיקרא ממחלקת האב.
  • אם נקרא למתודה סטטית באמצעות אובייקט הכיתה הילד, השיטה הסטטית של מחלקת הילד תיקרא.

בדוגמה הבאה, ל- ParentClass יש שיטה סטטית בשם display() וגם ל-ChildClass יש את אותה חתימת שיטה. השיטה במחלקה הנגזרת (ChildClass) מסתירה את השיטה במחלקה הבסיסית. בוא נראה דוגמה.

OverloadStaticMethodExample3.java

 public class OverloadStaticMethodExample3 { public static void main(String args[]) { ParentClass pc = new ChildClass(); //calling display() method by parent class object pc.display(); } } //parent class class ParentClass { //we cannot override the display() method public static void display() { System.out.printf('display() method of the parent class.'); } } //child class class ChildClass extends ParentClass { //the same method also exists in the ParentClass //it does not override, actually it is method hiding public static void display() { System.out.println('Overridden static method in Child Class in Java'); } } 

תְפוּקָה:

 display() method of the parent class.