假设我有三个类都扩展了同一个类。。。
public class Foo {
private String name;
...
}
public class FooExtend1 extends Foo {
...
}
public class FooExtend2 extends Foo {
...
}
public class FooExtend3 extends Foo {
...
}
然后我创建了一个util函数,它更改了从Foo。。。
public void changeName(??? param1) {
param1.setName("");
}
我希望param1是从Foo类扩展而来的所有对象。
我是否必须重载该方法,或者是否有其他方法?
我们不需要重写该方法,因为类型之间的继承关系赋予了从子类型到超类型的隐式扩展转换的能力(见JLS,§5.1.5(。因此,我们可以将该方法重写为
public void changeName(Foo param1) {
param1.setName("");
}
Ideone demo(我冒昧地将实用程序方法中的name
设置为"foo"
,这样我们就可以看到该方法在demo输出中有效(
考虑到Foo
有一个方法public String setName(String)
,这可以按预期工作。
备注:我建议将方法changeName(...)
重命名为更具表达性的方法,例如setEmptyName(...)
或resetNameToDefault(...)
。
您在parent中定义的方法可供其所有子级访问:
public void changeName(String param1) {
this.name = param1;
}
如果你想在外面的某个类中有方法:
public void changeName(Foo foo, String newName) {
foo.setName(newName);
}
你可以在那里通过任何Foo的后代。