通常情况子类覆写父类方法
如果是构造函数,直接用super()
如果是普通方法用super.method()
但是如果创建了子类实例,比如A类中覆写了Object的equals()方法
A a = new A();
a怎么调用Object的equals()方法
A没有显示继承其他类
首先,覆写是什么意思你肯定知道,子类的把父类的给覆盖掉了。子类拥有的方法域是子类的方法域与父类中可见的方法域的并集,如有重复,则保留子类中的此方法。至于a怎么调用Object的equals()方法,可以使用反射,相当于直接生成一个Object的实例,只不过下面的代码看似和A有什么关系,其实没什么关系:
public class A{
public static void main(String[] args) throws Exception{
A a = new A();
a.equals(args);
Method objectEquals = A.class.getSuperclass().getDeclaredMethod("equals", Object.class);
System.out.println(objectEquals.invoke("A", "A"));
}
@Override
public boolean equals(Object obj) {
System.out.println("A.equals");
return false;
}
}
因为你A类中重写了equals方法了,所以你就调用不到Object的equals方法了。
但是,话说回来,Object的equals方法是最基本的,你A类要重写equals方法的话,必须也重写hashCode方法,需要保证equals相同的对象一定有相同的hashCode值。
所以,最好用Eclipse自带的重写equals方法,自动生成以保证这个约定的成立。
你重写了equals方法,那你A类调用的肯定就是重写的方法了。但要是你一定要调用object里的方法,可以在把equals重载一下。
既然要覆写了方法,还要调用,不是矛盾吗
你直接a.equals()不就可以么,要重写就在A类里面重写equals就行了
就像你说的,可以在A类的equals方法中通过super来调用object类中的equals方法。
这样并没有什么意义呀,,还是不要钻牛角尖了吧
实在需要的话,你可以实例一个父类,用父类来调用重写的方法,这个方法比用反射直观些。
子类只能调用这个覆盖的方法 equals()
(覆盖的意思:就是将父类的覆盖掉了,子类对象调用该方法,只能是重写的覆盖方法,父类对象可以调用原来的equals())
土豪的世界我们不能理解,重写equals()方法后new的又是A的对象,无论怎么样都调用不了父类的equals()了,如果想调要么你删掉重写的equals()方法,要么new一个Object对象啊