כאשר מגדירים מתודה ב-class ניתן להגדירה במספר גרסאות שונות. הכלל הוא שה-type של הערך המוחזר חייב להיות זהה בכל הגרסאות, ובנוסף לכך, לכל אחת מהמתודות חייבת להיות חתימה שונה. כל אחת מהמתודות חייבת להיות עם מספר פרמטרים שונה ו/או עם type שונה לפרמטר אחד או יותר בהשוואה לכל הגרסאות האחרות.
הגרסה שתפעל בעת קריאה להפעלת המתודה
כאשר קוראים להפעלת המתודה, הגרסה שתפעל היא הגרסה המתאימה ביותר לארגומנטים שנשלחו, הן מבחינת מספר הארגומנטים והן מבחינת ה-type של כל אחד מהם.
class Something {
public static void f(int num1) {
System.out.println("1");
}
public static void f(int num1, int num2, int num3) {
System.out.println("2");
}
public static void f(int num1, int num2, double num3) {
System.out.println("3");
}
public static void main(String args[]) {
f(2,3,5.5);
}
}
בדוגמת הקוד יודפס ״3״ למסך. כיוון שלפונקציה f נשלחים שלושה ערכים, והערך השלישי הוא מספר עם שבר עשרוני, הגרסה המתאימה ביותר היא הגרסה השלישית.
הגדרת מתודה במספר גרסאות שונות תוך הקפדה על type זהה של הערך המוחזר בכל הגרסאות ותוך הקפדה על חתימה שונה לכל אחת מהגרסאות (מספר פרמטרים שונה ו/או type שונה בלפחות אחד מהפרמטרים) קוראים בשם Overloading.