子类Child的doSomething(HashMap<Integer,Integer>)是否重写父类的doSomething(Map<Integer,Integer>)?
子类Child的doSomething方法是否重写了父类Parent的对应方法?
结论:没有,这属于方法重载,而非重写。
Java中方法重写的核心要求之一是:方法的参数列表必须与父类被重写方法完全一致(返回值允许协变类型,但参数类型不允许缩小范围)。
看给出的代码:
public class Parent { public void doSomething(Map<String,String> map){ System.out.println("Parent"); } } public class Child extends Parent { public void doSomething(HashMap<String,String> map){ System.out.println("Child"); } }
父类方法的参数是Map<String,String>(接口类型),子类方法的参数是HashMap<String,String>(Map的实现类),两者参数类型并不完全相同。这种情况下,子类的方法只是在当前类中新增了一个同名但参数不同的方法,属于方法重载,而非对父类方法的重写。
可以通过一个简单的调用验证:
Parent parent = new Child(); // 传入HashMap对象,此时会调用父类的doSomething方法 parent.doSomething(new HashMap<>());
执行这段代码会输出Parent,说明父类的方法没有被重写,子类的方法只是一个独立的重载方法。
内容的提问来源于stack exchange,提问作者Tom Chen
相关产品推荐
相关产品推荐

