所有类的父类都是都是object.继承时都是要默认继承object这个类.
object中的equals方法.他的参数是boolean equals(Object obj)如果覆盖这个类的话为什么我的参数还要写成(Object obj)?
class student
{
String name;
int age;
public boolean equals(Object obj)
{
student st=null;
if(obj instanceof student)
{
st=(student)obj;
}
else
{
return false;
}
if(st.name==this.name && st.age==this.age)
{
return true;
}
else
return false;
}
}
class xue
{
public static void main(String [] args)
{
student p=new student();
student q=new student();
p.name="zhangsan";
p.age=20;
q.name="zhangsan";
q.age=20;
if(p.equals(q))
System.out.println("p=q");
else
System.out.println("p!=q");
}
}
我知道在在写父类时并不知道子类的名字叫什么.但为什么就要传递Object obj这样的参数?就因为父类中这样写的?所以我们继承了重写时候也必须这样写?
object中的equals方法.他的参数是boolean equals(Object obj)如果覆盖这个类的话为什么我的参数还要写成(Object obj)?
class student
{
String name;
int age;
public boolean equals(Object obj)
{
student st=null;
if(obj instanceof student)
{
st=(student)obj;
}
else
{
return false;
}
if(st.name==this.name && st.age==this.age)
{
return true;
}
else
return false;
}
}
class xue
{
public static void main(String [] args)
{
student p=new student();
student q=new student();
p.name="zhangsan";
p.age=20;
q.name="zhangsan";
q.age=20;
if(p.equals(q))
System.out.println("p=q");
else
System.out.println("p!=q");
}
}
我知道在在写父类时并不知道子类的名字叫什么.但为什么就要传递Object obj这样的参数?就因为父类中这样写的?所以我们继承了重写时候也必须这样写?
解决方案 »
- 在classpath中定义了相应包的地址,在eclipse中却无法引用
- *关于Thinking in java(第四版)导入问题
- 两长段代码中间有一部分会经常变化,用哪种设计模式写比较好?
- 泛型类的类型参数限制问题
- 已经安装了SQL SERVER2000的JDBC,但还是出错!
- 为什么JAVA要把goto作为关键字呢
- 一个目录树的父子节点有4千多或更多,现在用以前的XTREE代码出现了读取树结构读取不出的错误.请问用什么比较好,对于数据量较大的数据量的
- 路径的疑惑
- 很简单的问题怎么没人回答,是不是这里没有高手?
- swing,太令我惊奇了。
- java中有沒有現在的函數直接截取字符串前十個字符?
- 帮帮我吧 一个关于TableModelListener的问题
当然,如果你只是简单比较两个student对象是否相同,你完全可以写一个方法,参数是一个Student类的对象。而我建议你不要将它命名为equals以免混淆!
但是如果你需要一个使用场合更为复杂的比较方法,比如判断一个Animal类对象是否等于一个Student类对象(当然一般你不会有意这样比较,也许是你不小心这样比了,或者其它情况),那么我建议你重写一个equals方法来覆盖Object类的equals方法,同时我建议你也重写一个hashCode方法来保持一致性。这样一来你就万无一失了,如果有一个10岁的学生小强,和一个10岁的宠物小强,当你调用equals方法时你不会得出它们是同一个人的错误结论!