AbnormalClass.java



/** Javaのルールに沿わないクラス */
public class AbnormalClass {

  /** 嘘の情報を返す toString()メソッド */
    public String toString() {
        String info = "java.awt.Color" + "[r=128,g=256,b=512]";
        return info;
    }

  /** でたらめな値を返し、判定に利用できない hashCode()メソッド */
    public int hashCode() {
        int value = (int)( Math.random() * 100 );
        return value;
    }

  /** 常に false を返す equals()メソッド */
    public boolean equals( Object other ) {
        return false;
    }

  /** 実験用の main()メソッド */
    public static void main( String[] argv ) {

         AbnormalClass ab1 = new AbnormalClass();
      //嘘のクラス情報
         System.out.println( "自己申告:" + ab1.toString() );
      //本当のクラス名
         System.out.println( "正体は:" + ab1.getClass().getName() );
      //1回目の hash値
         System.out.println( "1回目:" + ab1.hashCode() );
      //2回目の hash値
         System.out.println( "2回目:" + ab1.hashCode() );
      //自分自身と同一か?
         if( ab1 == ab1 )
             System.out.println( "自分と同一なのは当り前" );
      //自分自身と内容が同じか?
         if( ab1.equals(ab1) )
             System.out.println( "自分と内容が同じなのは当り前" );
         else
             System.out.println( "自分と内容が違うなんて変!" );
    }
}