CS335 (Fall 2008)
Solution of Homework 3 (20 points)
Due: 9/23/08


(4 points)
1.  1) s.length()       // for String s
    2) a[i].length      // for array a[][]
    3) a.length         // for array a[][]
    4) a.length         // for array a[]


(4 points)
2.  1) True.
    2) False. Array space is not allocated in the declaration but by
       using the "new" operator.
    3) False. Strings are constants.
       (A String object is called immutable (read-only) because its value
        cannot be modified once it has been created. Methods that appear
        to modify a String object actually return a new String object
        that contains the modification.)
    4) False. A static method cannot access non-static variables or
       non-static methods directly. It must use an object reference.
       Also, a static method cannot use the "this" keyword as there
       is no instance for "this" to refer to.


(2 points)
3.  The code compiles and executes. But the constructor is no longer
    treated as a constructor, but a method (will not be called when
    an object is instantiated).


(4 points)
4.  You don't get the extra lines because whenever you say something
    like

         blah = blarg;

    all you really do is set the blah pointer to be equal to the blarg
    pointer; you don't copy the data.  When you then set circle1 to
    null that POINTER is set to NULL but since you still have two other
    pointers (namely, pointref and circle2) pointing to the same data
    then the garbage collector doesn't destroy it as it's still in use.
    If you set pointref and circle2 to NULL then nothing is pointing
    to the object anymore and the garbage collector will call
    finalize() on it.

(6 points)
5.  The class defined using composition instead of inheritance is
    shown below.

    In this case, using composition seems to makes more sense because a
    "base plus commission employee" is not really a "commission employee",
    but with the characteristic of a "commission employee". Therefore,
    the "is-a" relationship is not as strong as the "has-a" relationship.

////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////
public class BasePlusCommissionEmployee4
{
    private double baseSalary;
    private CommissionEmployee3 e;

    public BasePlusCommissionEmployee4( String first, String last,
        String ssn, double sales, double rate, double salary )
    {
        CommissionEmployee3 e =
          new CommissionEmployee3( first, last, ssn, sales, rate );
        setBaseSalary( salary );
    }

    public void setBaseSalary( double salary )
    {
        baseSalary = ( salary < 0.0 ) ? 0.0 : salary ;
    }

    public double getBaseSalary( )
    {
        return baseSalary;
    }

    public double earnings( )
    {
        return getBaseSalary() + e.earnings();
    }

    public String toString( )
    {
        return String.format( "%s %n%s: %.2f", "base-salaried",
                   e.toString( ), "base salary", getBaseSalary( ) );
    }
}
////////////////////////////////////////////////////////////////////