首页 > 试题广场 >

给出以下代码,请给出结果。

[单选题]
给出以下代码
public class TestObj{ 
    public static void main(String[] args){
        Object o=new Object(){
            public boolean equals(Object obj){
                return true;
            }
        }; 
        System.out.println(o.equals("Fred"));
    }
} 
请给出结果:()
  • 运行时抛出异常
  • true
  • Fred
  • 第三行编译错误
重写了euqals方法
发表于 2015-12-30 17:16:44 回复(1)
更多回答

本题涉及匿名内部类、多态和覆盖三个知识点。 语句

Object o=new Object(){
            public boolean equals(Object obj){
                return true;
            }
        };

创建了一个匿名内部类,并将所创建的匿名对象赋给 Object (多态:子类对象赋给超类引用)。同时,该匿名内部类重写了 Object 类的 equals 方法。

在执行语句

o.equals(“Fred”)

时,根据多态及覆盖原则,会调用匿名内部类重写后的 equals 方法。

关于 “Java 内部类 ” 和 "Java 继承、多态与类的复用" 的更详细的阐述,请查看我的两篇博文 “http://blog.csdn.net/justloveyou_/article/details/53245561” 和 “http://blog.csdn.net/justloveyou_/article/details/52798666”。 
编辑于 2016-12-11 11:21:32 回复(14)
答案:B
public class TestObj {
	public static void main(String[] args){
        Object o=new Object(){
        	//重写了equals(),不管参数是什么,都是返回true
            public boolean equals(Object obj){
                return true;
            }
        };
        System.out.println(o.equals("Fred"));
    }
}

发表于 2016-07-08 13:15:19 回复(2)
都没注意到True是大写嘛,我就是纠结这个所以觉得没有答案是对的,乱选了一个
发表于 2016-05-18 10:36:43 回复(6)
这是匿名类 
    格式是:new 父类/接口 () {定义成员或覆盖方法}
    使用场景:只使用一次时。
发表于 2017-06-19 15:30:58 回复(3)
public class TestFred { public static void main(String[] args) { Object o=new Object(){ public boolean equals(Object obj){ return true; } }; System.out.println(o.equals("Fred")); } } 看错题了,equals方法师写在Object类里面的。这个知识点是函数的重写。。跟String类无关的。。。楼上。。
发表于 2015-08-12 21:44:32 回复(2)

默认的Object类并没有重写equals()函数,默认比较的是地址,这重写了无论与谁比较都是TRUE

发表于 2015-08-27 15:35:52 回复(1)
选择B.
要理解String继承Object类,也是Object类,因此这里没有错误。
发表于 2015-01-01 20:11:40 回复(1)
首先这个题目涉及匿名类,Object o = new Object() {
    public boolean equals(Object obj) {
        return true;    
    }
};
这里创建了一个匿名类,从代码中可以看出,匿名类顾名思义没有名字,的确没名字,该匿名类继承了Object,并且重写了基类的equals方法。
然后把建立的匿名类的对象给了o,此处o是Object类型,因此这里实际上还发生了向上转型,接下来在下面调用了equals方法,这里又运用了多态,由于后期绑定(多态),它会调用子类的equals方法,程序返回true。答案选B。
发表于 2018-06-01 19:49:31 回复(0)
里面写任何值,返回的值都是true
发表于 2015-10-19 21:30:06 回复(1)
发表于 2019-09-21 22:16:31 回复(0)
本题涉及匿名内部类、多态和覆盖三个知识点。 语句 Object o=new Object(){ public boolean equals(Object obj){ return true; } }; 创建了一个匿名内部类,并将所创建的匿名对象赋给 Object (多态:子类对象赋给超类引用)。同时,该匿名内部类重写了 Object 类的 equals 方法。 在执行语句 o.equals(“Fred”) 时,根据多态及覆盖原则,会调用匿名内部类重写后的 equals 方法。
发表于 2021-09-17 06:52:25 回复(0)
喔喔,原来这里的equals方法被重写了,只要传入合法的参数就返回true,而不是比较对象o与字符串Fred是否相同。
发表于 2021-03-17 11:07:42 回复(1)
匿名内部类的的重写,一直纠结不加上@Override标签可能会报错🤣
发表于 2019-10-06 22:18:47 回复(1)
匿名内部类,重写obiect类的equals方法
发表于 2016-09-02 09:48:48 回复(0)
重写了equles方法,不管后面发生什么,都返回true
发表于 2021-04-25 08:49:00 回复(0)
The method equals(Object) in the type Object is not applicable for the 
arguments ()
发表于 2017-08-31 18:55:46 回复(1)
Object o = new Object(){
                                        publicbooleanequals(Object obj)
                      {
                      returntrue;
                    }
                                    }
首先o的编译时类型为一般的Object类,但是其运行时类型则变为了equals方法被重写的Object类,所以在调用o.equals()方法时,总是调用的运行时类里的equals()方法,即总是return true
发表于 2016-09-01 17:03:15 回复(0)
失误啊
发表于 2015-09-23 19:17:06 回复(0)
使用了匿名内部类,并在其中重写了object的equals方法
发表于 2023-03-13 16:21:38 回复(0)