2012-08-28 47 views
-2

TestEquals class使Puzzle3类的主要方法打印false从等于方法返回假而不覆盖

注意:您无法覆盖TestEquals类的equals方法。

public class Puzzle3 { 
    public static void main(String[] args) { 
     TestEquals testEquals = new TestEquals(); 
     System.out.println(testEquals.equals(testEquals)); 
    } 
} 

我没有找到一个方法来做到这一点,请分享您的意见

+0

* “请分享您的意见” *这不是一个问题。 –

+0

听起来像功课,或测试 –

+1

这将是Joshua Bloch的* Java Puzzlers *。 –

回答

4

您不得重写equals方法,但没有理由不能重载equals方法。

方法的Object.Equals有原型:

public boolean equals(Object o) { ... } 

要重写此方法,你必须创建具有相同原型TestEquals的方法。但是,您的问题陈述表明您不允许覆盖此方法。没问题,重载方法是完成任务的有效方法。简单地将以下方法定义添加到TestEquals中:

public boolean equals(TestEquals o) { return false; } 

然后就完成了。

+0

非常棒的家伙:) –

3

而不是覆盖等于你可以超载等于

class TestEquals { 
    // a common mistake which doesn't override equals(Object) 
    public boolean equals(TestEquals te) { 
      return false; 
    } 
} 
3

继将打印假:)

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.OutputStream; 
import java.io.PrintStream; 
import java.io.UnsupportedEncodingException; 

public class TestEquals { 

    public static void main(String[] args) { 
    TestEquals testEquals = new TestEquals(); 
    System.out.println(testEquals.equals(testEquals)); 
    } 

    static { 
    System.setOut(new CustomPrintStream(new PrintStream(System.out))); 
    } 

    public static class CustomPrintStream extends PrintStream { 

    /** 
    * This does the trick. 
    */ 
    @Override 
     public void println(boolean x) { 
     super.println(!x); 
    } 

    public CustomPrintStream(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException { 
     super(file, csn); 
    } 

    public CustomPrintStream(File file) throws FileNotFoundException { 
     super(file); 
    } 

    public CustomPrintStream(OutputStream out, boolean autoFlush, String encoding) 
     throws UnsupportedEncodingException { 
     super(out, autoFlush, encoding); 
    } 

    public CustomPrintStream(OutputStream out, boolean autoFlush) { 
     super(out, autoFlush); 
    } 

    public CustomPrintStream(OutputStream out) { 
     super(out); 
    } 

    public CustomPrintStream(String fileName, String csn) throws FileNotFoundException, 
                   UnsupportedEncodingException { 
     super(fileName, csn); 
    } 

    public CustomPrintStream(String fileName) throws FileNotFoundException { 
     super(fileName); 
    } 
    } 
} 
+0

+1从攻角的角度比预期的;) – Alpedar