UGN Security
Posted By: javafan question regarding upcasting/downcasting - 05/28/04 08:40 AM
http://www.nomorepasting.com/paste.php?pasteID=12689&noLineNums=1&Seen=TRUE

there is my completed program, i am using JBuilder X, have been programming for a while; so the code is done right yet the java compiler complains that getPctBonus() is not apart of class Employee can be reached at yahoo sn nummiweld
Posted By: pergesu Re: question regarding upcasting/downcasting - 05/28/04 08:54 AM
That's because your code isn't done right.

You asked the question, but apparently didn't look at the information. The compiler complains that getPctBonus() isn't a part of class Employee. A two second look at the code shows that it's in fact not a part of Employee, but is in all the subclasses.

Take that method out of all the subclasses and put it in Employee. Then you won't have any problems.
Posted By: javafan Re: question regarding upcasting/downcasting - 05/28/04 09:25 AM
method getPctBonus() isnt supposed to be a part of class Employee, i am to coerce the method getPctBonus() to class Employee using downcasting, which happens to be the subject of my heading.

i left out getPctBonus() from Employee on purpose.
did you bother to read the instructions?
here it is-


In the code below, employee is an array of Employee references containing objects of different Employee subclasses.

Note that the compiler treats the computeBonus ( ) call as a call to a method within an Employee object. Since Employee class provides an abstract method computeBonus( ), the code will compile but it will not statically bind to the method.

(Since Java provides runtime binding, the compiler will not bind the call to the computeBonus ( ) method of the Employee object. Instead at run time, JVM will bind the call to the target object�s computeBonus ( ) method which will execute. The call will execute properly because all objects of Employee subclasses provide a concrete computeBonus ( ) method.)

To access target object methods that are not present in class Employee, use down casting with explicit type coercing. Since down casting is potentially unsafe, do this within an if statement using the clause instanceof . The Java language clause instanceof checks for the type of the target object at run time. The use of clause instanceof ensures that the target object is of a specific type before type coercing it.

In the code below, the instance of clause makes sure that the target object is of a specific type (say type Worker) before type coercing it to that type.
Posted By: pergesu Re: question regarding upcasting/downcasting - 05/28/04 02:31 PM
We went over this online.

Anyway, if a method doesn't exist in the Employee class, you can't invoke that method using an Employee reference. You'd have to use one of the subclasses.
Code
Employee ceo = new Exec("pergesu");

/* This line won't compile
ceo.getPctBonus();
*/

// Cast it to an Exec object, and invoke the method
((Exec) ceo).getPctBonus();
Put simply, if a method doesn't exist in a class definition, you can't call it. You have to cast it to a class type that does have the method. Exactly as I showed you online, as well as above.
© UGN Security Forum