// ------------------------------------------------------------ // Name.java //
ID: 3790275 • Letter: #
Question
// ------------------------------------------------------------
// Name.java
// ------------------------------------------------------------
public class Name
{
private String first; // first name
private String last; // last name
public Name()
{
this ( "", "" );
}
public Name(String firstName, String lastName)
{
first = firstName;
last = lastName;
}
public void setName(String firstName, String lastName)
{
first = firstName;
last = lastName;
}
public Name(Name obj) throws NullPointerException { } // Copy Constructor
public void setFirst(String firstName) { first = firstName; }
public void setLast (String lastName ) { last = lastName; }
public String getFirst() { return first; }
public String getLast () { return last; }
public String getName () { return toString(); }
public void giveLastNameTo ( Name aName )
{
aName.setLast ( last );
}
@Override
public boolean equals ( Object obj )
{
return false;
} // Equals method
public String toString( )
{
return first + " " + last;
}
public void finalize ( )
{
System.out.println("Finalizing the name object");
System.out.println(this);
} // finalize method
public void dispose ( )
{
System.out.println("Disposing the name object");
System.out.println(this);
} // dispose method
public int hashCode ( )
{
return super.hashCode();
} // hashCode method
public int compareTo (Name nameObj)
{
return nameObj.getName().compareTo(this.getName());
}
} // end Name
//------------------------------------------------------------------------
// ----------------------------------------------------------
// Student.java
// ----------------------------------------------------------
public class Student
{
private Name fullName;
private String id;
public Student()
{
this ( new Name ( ), "" );
}
public Student(Name studentName, String studentId)
{
fullName = studentName;
id = studentId;
}
public Student(Student obj) throws NullPointerException { }
@Override
public Object clone() throws CloneNotSupportedException
{
return super.clone();
}
public void setStudent(Name studentName, String studentId)
{
fullName = studentName;
id = studentId;
}
public void setName(Name studentName) { fullName = studentName; }
public Name getName() { return fullName; }
public void setId(String studentId) { id = studentId; }
public String getId() { return id; }
@Override
public String toString()
{
return id + " " + fullName.toString ( );
}
@Override
public boolean equals ( Object obj )
{
return false;
}
@Override
public void finalize()
{
System.out.println("Finalizing the student object");
System.out.println(this);
}
public void dispose()
{
System.out.println("Disposing the student object");
System.out.println(this);
}
public int hashCode()
{
return super.hashCode();
}
public int compareTo (Student studentObj )
{
return studentObj.getName().compareTo(this.getName());
}
} // end Student
//-----------------------------------------
// -----------------------------------------------
// TestStudentName.java
// -----------------------------------------------
public class TestStudentName
{
public static void main ( String [ ] args ) throws CloneNotSupportedException
{
Name n1 = new Name ( "Ty", "Cobb" );
Name n2 = new Name ( "Babe", "Ruth" );
// ---- Test the copy constructor --------
System.out.println ( "Test the copy constructor ------------" );
Student s1 = new Student ( n1, "123456" );
Student s2 = new Student ( s1 );
s2.setStudent ( n2, "234567" );
if ( s1.equals ( s2 ) )
{
System.out.println ( " Error - students should not be the same" );
System.out.println ( " s1 = " + s1 );
System.out.println ( " s1 = " + s2 );
}
else
{
System.out.println ( " Success - students are not the same" );
System.out.println ( " s1 = " + s1 );
System.out.println ( " s1 = " + s2 );
}
//
System.out.println("student1");
System.out.println(s1);
System.out.println("student2");
System.out.println(s2);
//
// ---- Test the clone method ------------
System.out.println ( " Test the 'clone' method ------------" );
Student s3 = (Student) s1.clone ();
if ( s1.equals ( s3 ) )
System.out.println ( " Success - Students s1 and s3 are the same." );
else
{
System.out.println ( " Error - Students s1 and s3 are not the same" );
System.out.println ( " s1 = " + s1 );
System.out.println ( " s3 = " + s3 );
}
s3.setStudent ( n2, "234567" );
if ( s1.equals ( s3 ) )
{
System.out.println ( " Error - students should not be the same" );
System.out.println ( " s1 = " + s1 );
System.out.println ( " s1 = " + s3 );
}
else
System.out.println ( " Success - students are not the same" );
// ---- Test the finalize method ---------
System.out.println ( " Test the 'finalize' method ------------" );
s1 = null;
System.gc();
System.out.println ( " Should see the 'finalize' message ------------" );
// ---- Test the dispose method ----------
System.out.println ( " Test the 'dispose' method ------------" );
s2.dispose();
System.out.println ( " Should see the 'dispose' message ------------" );
s2 = null;
// ---- Test the hashCode method ---------
s1 = new Student ( s3 );
System.out.println ( " Test the 'hashCode' method ------------" );
if ( s1.hashCode ( ) == s3.hashCode ( ) )
System.out.println ( " Success - hashCode for s1 and s3 are the same." );
else
{
System.out.println ( " Error - hashCode for s1 and s3 are not the same." );
System.out.println ( " s1.hashCode = " + s1.hashCode() );
System.out.println ( " s3.hashCode = " + s3.hashCode() );
}
System.out.println ( );
}
}
//Getting error Student s3 = (Student) s1.clone (); <---------------------
Explanation / Answer
clone() is a protected method in Object class and cannot be directly accessed by any other class not in th same package. To use clone() you will need to implement Cloneable interface.
Check the code below
class Name
{
private String first; // first name
private String last; // last name
public Name()
{
this ( "", "" );
}
public Name(String firstName, String lastName)
{
first = firstName;
last = lastName;
}
public void setName(String firstName, String lastName)
{
first = firstName;
last = lastName;
}
public Name(Name obj) throws NullPointerException { } // Copy Constructor
public void setFirst(String firstName) { first = firstName; }
public void setLast (String lastName ) { last = lastName; }
public String getFirst() { return first; }
public String getLast () { return last; }
public String getName () { return toString(); }
public void giveLastNameTo ( Name aName )
{
aName.setLast ( last );
}
@Override
public boolean equals ( Object obj )
{
return false;
} // Equals method
public String toString( )
{
return first + " " + last;
}
public void finalize ( )
{
System.out.println("Finalizing the name object");
System.out.println(this);
} // finalize method
public void dispose ( )
{
System.out.println("Disposing the name object");
System.out.println(this);
} // dispose method
public int hashCode ( )
{
return super.hashCode();
} // hashCode method
public int compareTo (Name nameObj)
{
return nameObj.getName().compareTo(this.getName());
}
} // end Name
//------------------------------------------------------------------------
// ----------------------------------------------------------
// Student.java
// ----------------------------------------------------------
class Student implements Cloneable
{
private Name fullName;
private String id;
public Student()
{
this ( new Name ( ), "" );
}
public Student(Name studentName, String studentId)
{
fullName = studentName;
id = studentId;
}
public Student(Student obj) throws NullPointerException { }
@Override
public Object clone() throws CloneNotSupportedException
{
return super.clone();
}
public void setStudent(Name studentName, String studentId)
{
fullName = studentName;
id = studentId;
}
public void setName(Name studentName) { fullName = studentName; }
public Name getName() { return fullName; }
public void setId(String studentId) { id = studentId; }
public String getId() { return id; }
@Override
public String toString()
{
return id + " " + fullName.toString ( );
}
@Override
public boolean equals ( Object obj )
{
return false;
}
@Override
public void finalize()
{
System.out.println("Finalizing the student object");
System.out.println(this);
}
public void dispose()
{
System.out.println("Disposing the student object");
System.out.println(this);
}
public int hashCode()
{
return super.hashCode();
}
public int compareTo (Student studentObj )
{
return studentObj.getName().compareTo(this.getName());
}
} // end Student
//-----------------------------------------
// -----------------------------------------------
// TestStudentName.java
// -----------------------------------------------
public class TestStudentName
{
public static void main ( String [ ] args ) throws CloneNotSupportedException
{
Name n1 = new Name ( "Ty", "Cobb" );
Name n2 = new Name ( "Babe", "Ruth" );
// ---- Test the copy constructor --------
System.out.println ( "Test the copy constructor ------------" );
Student s1 = new Student ( n1, "123456" );
Student s2 = new Student ( s1 );
s2.setStudent ( n2, "234567" );
if ( s1.equals ( s2 ) )
{
System.out.println ( " Error - students should not be the same" );
System.out.println ( " s1 = " + s1 );
System.out.println ( " s1 = " + s2 );
}
else
{
System.out.println ( " Success - students are not the same" );
System.out.println ( " s1 = " + s1 );
System.out.println ( " s1 = " + s2 );
}
//
System.out.println("student1");
System.out.println(s1);
System.out.println("student2");
System.out.println(s2);
//
// ---- Test the clone method ------------
System.out.println ( " Test the 'clone' method ------------" );
Student s3 = (Student) s1.clone ();
if ( s1.equals ( s3 ) )
System.out.println ( " Success - Students s1 and s3 are the same." );
else
{
System.out.println ( " Error - Students s1 and s3 are not the same" );
System.out.println ( " s1 = " + s1 );
System.out.println ( " s3 = " + s3 );
}
s3.setStudent ( n2, "234567" );
if ( s1.equals ( s3 ) )
{
System.out.println ( " Error - students should not be the same" );
System.out.println ( " s1 = " + s1 );
System.out.println ( " s1 = " + s3 );
}
else
System.out.println ( " Success - students are not the same" );
// ---- Test the finalize method ---------
System.out.println ( " Test the 'finalize' method ------------" );
s1 = null;
System.gc();
System.out.println ( " Should see the 'finalize' message ------------" );
// ---- Test the dispose method ----------
System.out.println ( " Test the 'dispose' method ------------" );
s2.dispose();
System.out.println ( " Should see the 'dispose' message ------------" );
s2 = null;
// ---- Test the hashCode method ---------
s1 = new Student ( s3 );
System.out.println ( " Test the 'hashCode' method ------------" );
if ( s1.hashCode ( ) == s3.hashCode ( ) )
System.out.println ( " Success - hashCode for s1 and s3 are the same." );
else
{
System.out.println ( " Error - hashCode for s1 and s3 are not the same." );
System.out.println ( " s1.hashCode = " + s1.hashCode() );
System.out.println ( " s3.hashCode = " + s3.hashCode() );
}
System.out.println ( );
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.