Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures

Home

Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips

Books

Submit News
Search the site here...
Search...
 
Search the JavaFAQ.nu
1000 Java Tips ebook

1000 Java Tips - Click here for the high resolution copy!1000 Java Tips - Click here for the high resolution copy!

Java Screensaver, take it here

Free "1000 Java Tips" eBook is here! It is huge collection of big and small Java programming articles and tips. Please take your copy here.

Take your copy of free "Java Technology Screensaver"!.

Easy Learn Java: Programming Articles, Examples and Tips - Page 189


Previous 1060 Stories (530 Pages, 2 Per Page) Next

The Java Lesson 15: Overloading class methods

Go to all tips in Java Lessons by Jon Huhtala
All Java Lessons contents page | Java Lesson 1 | Java Lesson 2 | Java Lesson 3 | Java Lesson 4 | Java Lesson 5 | Java Lesson 6 | Java Lesson 7 | Java Lesson 8 | Java Lesson 9 | Java Lesson 10 | Java Lesson 11 | Java Lesson 12 | Java Lesson 13 | Java Lesson 14 | Java Lesson 15 | Java Lesson 16 | Java Lesson 17 | Java Lesson 18 | Java Lesson 19 | Java Lesson 20 | Java Lesson 21 | Java Lesson 22 | Java Lesson 23 | Java Lesson 24 | Java Lesson 25 | Java Lesson 26 | Java Lesson 27 | Java Lesson 28 | Java Lesson 29 | Java Lesson 30 | Java Lesson 31 | Java Lesson 32 | Java Lesson 33 | Java Lesson 34 | Java Lesson 35 | Java Lesson 36 | Java Lesson 37 | Java Lesson 38 | Java Lesson 39 | Java Lesson 40 | Java Lesson 41 | Java Lesson 42 | Java Lesson 43 | Java Lesson 44 | Java Lesson 45 | Java Lesson 46

The Java Lesson 15

Overloading class methods


Overview

It is possible in Java to define several methods which have the same name but a recognizable difference in their parameters. This is referred to as method overloading. When a call expression is encountered, the compiler knows which of the identically named methods to call based upon the parameters being passed.

Overloaded class methods

  • Can be defined within a single class or in multiple classes having the same root class (to be covered in a later lesson).

  • Have the same method name.

  • Must differ in the number, data type, or order of their parameters. This is necessary for the compiler to know which method is which. The combination of the method name and its parameters is sometimes known as the method's "signature" because it must be unique (with the exception of method overriding which will be covered later).

For example, consider the following method headers:

public static double area(double length, double width)

public static double area(double radius)

public static double area(double top, double bottom, double height)

These represent the headers of methods that could be used to calculate the area of a rectangle, the area of a circle, and the area of a trapezoid. If the compiler encounters the call expression

area(2.3)

it knows to call the second area() method (to calculate the area of a circle) because that method only accepts one double parameter. If the compiler encounters the call expression

area(3.5, 1.7)

it knows to call the first area() method (to calculate the area of a rectangle) because that method accepts two double parameters. And, if the compiler encounters the call expression

area(4.2, 1.8, 3.4)

it knows to call the third area() method (to calculate the area of a trapezoid) because that method accepts three double parameters.

  • Can be impacted by the automatic widening of parameters. For example, based upon the above method headers, the call expression

area(2)

would result in the compiler calling the second area() method (to calculate the area of a circle) because the int being passed can be widened to a double. If this is a problem, another overloaded method could be defined which only accepts a single integer parameter. Its header might be

public static double area(long radius)

If any type of integer is passed (byte, short, etc.), it would be widened to a long and passed to this overloaded method. Because of automatic widening, care must be used in defining overloaded methods.

  • Can return different data types. As far as the compiler is concerned, overloaded methods are different methods and may each return a different data type. For example,

public static void aMethod(byte parm1, float parm2)

public static int aMethod()

public static char aMethod(float parm1, byte parm2)

public static boolean aMethod(double parm1)

are the headers of four different methods that happen to have the same name. What you are NEVER allowed to do, however, is to have exactly the same signatures but return different data types. For example, the following method headers

public static int aMethod(int x)

public static char aMethod(int y)

would result in a compile error because the compiler wouldn't know which method to call if it encountered a call expression such as

aMethod(17)


Sample program

The following sample program calculates the amount due for an order. Overloaded methods are used to perform the calculation differently depending upon how many items are ordered and whether or not the item is taxable.

public class App {
    public static void main(String[] args) {

    // Variables.

        byte quantity;
        double unitPrice;
        boolean isTaxable;
        double amountDue;
        char again;

        // Constants.

        final double TAX_RATE = .06;

        // Loop to process one order.

        do {

            // Get data from the user.

            Utility.separator(50, '>');
            System.out.print("Enter quantity ordered: ");
            quantity = Keyboard.readByte();
            System.out.print("Enter unit price: ");
            unitPrice = Keyboard.readDouble();
            System.out.print("Taxable item? (true or false): ");
            isTaxable = Keyboard.readBoolean();

            // Process the order data.

            Utility.skip();

            if (quantity <= 0 || unitPrice <= 0) {
                System.out.println(" Invalid data");
            } else if (quantity == 1 && isTaxable) {
                System.out.println("Single item with tax: " +
                Utility.moneyFormat(amountDue(unitPrice, TAX_RATE)));
            } else if (quantity == 1 && !isTaxable) {
                System.out.println("Single item without tax: " +
                Utility.moneyFormat(amountDue(quantity, unitPrice)));
            } else if (quantity > 1 && isTaxable) {
                System.out.println("Multiple items with tax: " +
                Utility.moneyFormat(amountDue(quantity, unitPrice, TAX_RATE)));
            } else {
                System.out.println("Multiple items without tax: " +
                Utility.moneyFormat(amountDue(quantity, unitPrice)));
            }

            // Ask if they want to do another and repeat as requested.

            Utility.skip();
            System.out.print("Again? (Y/N): ");
            again = Keyboard.readChar();
        }

        while (again == 'Y' || again == 'y');
    }

/**
* Method to calculate the amount due for an order of multiple
* non-taxable items. This method receives the quantity and the
* unit price.
*/

public static double amountDue(int qty, double price) {
    return qty * price;
}

/**
* Method to calculate the amount due for an order of multiple
* taxable items. This method receives the quantity, the unit
* price, and the sales tax rate.
*/

public static double amountDue(int qty, double price, double rate) {
    return qty * price * (1 + rate);
}

/**
* Method to calculate the amount due for an order of a single
* taxable item. This method receives the unit price and the
* sales tax rate.
*/

public static double amountDue(double price, double rate) {
    return price * (1 + rate);
}
}

Notes:

  1. Although the overloaded methods are trivial in this sample, they demonstrate how overloaded methods work. Be sure to notice how their signatures differ and how they are called.

  2. Don't be intimidated by the level of cascading. Read cascaded code from the inside and work out. Focus on what you get back from the inner method and see how that value can be used as a parameter in calling the outer method. Being able to nest method calls inside method calls is one of the strengths of Java.

Lab exercise for Ferris students

E-mail your answers to this assignment no later than the due date listed in the class schedule.

Review questions

  1. Based upon the following class definition, which of the methods below can be legally defined at line 4? (choose three)

1
2
3
4
5
public class MyMethods {
public static int aMethod(int a, char b) {
}

}
  1. public static int aMethod(int c, char d) {}

  2. public static int aMethod(char b, int a) {}

  3. public static byte aMethod(int x, char y) {}

  4. public static byte aMethod(char b, int a) {}

  5. public static void aMethod(char b, int a) {}

  1. If a class named MyClass has methods with the headers

1
2
3
4
5
public static void aMethod(float a, boolean b)
public static void aMethod(double a, boolean b)
public static void aMethod(int a, boolean b)
public static void aMethod(long a, boolean b, char c)
public static void aMethod(int a, boolean b, char c)

Which of the methods would be called by the following expression?

aMethod(123L, true)

  1. method 1

  2. method 2

  3. method 3

  4. method 4

  5. method 5

  1. What will happen when an attempt is made to compile and execute the following program? The line numbers are for reference purposes only.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class App {
public static void main(String[] args) {
System.out.println("Result: " + aMethod(3, 2.0));
}
public static int aMethod(int a, int b) {
return a * b;
}
public static double aMethod(int a, double b) {
return a + b;
}
public static double aMethod(double a, int b) {
return a - b;
}
}
  1. a compile error will occur at line 3

  2. the program will compile but an error will occur at run time

  3. the program will compile and run to display "Result: 6"

  4. the program will compile and run to display "Result: 5.0"

  5. the program will compile and run to display "Result: 1.0"

  1. What will happen when an attempt is made to compile and execute the following program? The line numbers are for reference purposes only.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class App {
public static void main(String[] args) {
short x = 7;
aMethod(x);
System.out.println("Variable of x is now " + x);
}
public static int aMethod(int a) {
System.out.println("Received an int");
return a + 1;
}
public static double aMethod(double b) {
System.out.println("Received a double");
return b + 1;
}
}
  1. a compile error will occur at line 4

  2. the program will compile but an error will occur at run time

  3. the program will compile and run to display:

Received an int
Value of x is now 7

  1. the program will compile and run to display:

    Received an int
    Value of x is now 8

  2. the program will compile and run to display:

    Received a double
    Value of x is now 7.0

  3. the program will compile and run to display:

    Received a double
    Value of x is now 8.0


15426 bytes more | comments? | Printer Friendly Page  Send to a Friend | Score: 4.6
Posted by jalex on Wednesday, March 24, 2004 (00:00:00) (14213 reads)

I read that in the Java (version 1.4.x) reflection implementation has been optim

Go to all tips in General Java

Question: I read that in the Java (version 1.4.x) reflection implementation has been optimized for speed and it is significantly faster now...?

Answer: The APIs and semantics are the same as in previous J2SE versions. There are three key optimizations in the new implementation:

Caching of results of Class.getFields(), Class.getMethods(), and related routines
Dynamic generation of bytecodes for Method.invoke() and Constructor.newInstance()
Optimized security checks for reflective calls

Due to these optimizations, reflective method calls are between 20 and 25 times faster, and reflective object creation is between 5 and 6 times faster. Reflection intensive code, such as serialization, has benefited from this additional speed.

The tip is based on Sun’s "Version 1.4 Core Libraries" description
*******************************************
Our older tips: March 22, 2001 - October 21, 2002 READ HERE
All published and not published on the site tips read HERE



1 comment | Printer Friendly Page  Send to a Friend | Score: 0
Posted by jalex on Tuesday, March 23, 2004 (00:00:00) (2999 reads)

Previous 1060 Stories (530 Pages, 2 Per Page) Next

530| 529| 528| 527| 526| 525| 524| 523| 522| 521| 520| 519| 518| 517| 516| 515| 514| 513| 512| 511| 510| 509| 508| 507| 506| 505| 504| 503| 502| 501| 500| 499| 498| 497| 496| 495| 494| 493| 492| 491| 490| 489| 488| 487| 486| 485| 484| 483| 482| 481| 480| 479| 478| 477| 476| 475| 474| 473| 472| 471| 470| 469| 468| 467| 466| 465| 464| 463| 462| 461| 460| 459| 458| 457| 456| 455| 454| 453| 452| 451| 450| 449| 448| 447| 446| 445| 444| 443| 442| 441| 440| 439| 438| 437| 436| 435| 434| 433| 432| 431| 430| 429| 428| 427| 426| 425| 424| 423| 422| 421| 420| 419| 418| 417| 416| 415| 414| 413| 412| 411| 410| 409| 408| 407| 406| 405| 404| 403| 402| 401| 400| 399| 398| 397| 396| 395| 394| 393| 392| 391| 390| 389| 388| 387| 386| 385| 384| 383| 382| 381| 380| 379| 378| 377| 376| 375| 374| 373| 372| 371| 370| 369| 368| 367| 366| 365| 364| 363| 362| 361| 360| 359| 358| 357| 356| 355| 354| 353| 352| 351| 350| 349| 348| 347| 346| 345| 344| 343| 342| 341| 340| 339| 338| 337| 336| 335| 334| 333| 332| 331| 330| 329| 328| 327| 326| 325| 324| 323| 322| 321| 320| 319| 318| 317| 316| 315| 314| 313| 312| 311| 310| 309| 308| 307| 306| 305| 304| 303| 302| 301| 300| 299| 298| 297| 296| 295| 294| 293| 292| 291| 290| 289| 288| 287| 286| 285| 284| 283| 282| 281| 280| 279| 278| 277| 276| 275| 274| 273| 272| 271| 270| 269| 268| 267| 266| 265| 264| 263| 262| 261| 260| 259| 258| 257| 256| 255| 254| 253| 252| 251| 250| 249| 248| 247| 246| 245| 244| 243| 242| 241| 240| 239| 238| 237| 236| 235| 234| 233| 232| 231| 230| 229| 228| 227| 226| 225| 224| 223| 222| 221| 220| 219| 218| 217| 216| 215| 214| 213| 212| 211| 210| 209| 208| 207| 206| 205| 204| 203| 202| 201| 200| 199| 198| 197| 196| 195| 194| 193| 192| 191| 190|
189
| 188| 187| 186| 185| 184| 183| 182| 181| 180| 179| 178| 177| 176| 175| 174| 173| 172| 171| 170| 169| 168| 167| 166| 165| 164| 163| 162| 161| 160| 159| 158| 157| 156| 155| 154| 153| 152| 151| 150| 149| 148| 147| 146| 145| 144| 143| 142| 141| 140| 139| 138| 137| 136| 135| 134| 133| 132| 131| 130| 129| 128| 127| 126| 125| 124| 123| 122| 121| 120| 119| 118| 117| 116| 115| 114| 113| 112| 111| 110| 109| 108| 107| 106| 105| 104| 103| 102| 101| 100| 99| 98| 97| 96| 95| 94| 93| 92| 91| 90| 89| 88| 87| 86| 85| 84| 83| 82| 81| 80| 79| 78| 77| 76| 75| 74| 73| 72| 71| 70| 69| 68| 67| 66| 65| 64| 63| 62| 61| 60| 59| 58| 57| 56| 55| 54| 53| 52| 51| 50| 49| 48| 47| 46| 45| 44| 43| 42| 41| 40| 39| 38| 37| 36| 35| 34| 33| 32| 31| 30| 29| 28| 27| 26| 25| 24| 23| 22| 21| 20| 19| 18| 17| 16| 15| 14| 13| 12| 11| 10| 9| 8| 7| 6| 5| 4| 3| 2| 1|


Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy