让 superclass 的方法由继承的 class 实现
Letting superclass's methods be implemented by an inherited class
假设我的代码有这样的结构:
public abstract class A{
public abstract Foo methodX();
public abstract Bar methodY();
}
public class B extends A {
public Foo methodX(){
// stuff
}
public Bar methodY(){
// more stuff
}
}
public class C extends A {
public Foo methodX() {
// stuff
}
public Bar methodY(){
// What to do?
}
}
public class D extends C {
public Bar methodY() {
// do stuff
}
}
public class F extends C {
public Bar methodY() {
// do different stuff
}
}
我这样做的原因是因为我有多个 class
es 扩展 A
,都有共同的方法 methodX()
和 methodY()
而且我有多个 class
es extending B
都有一些与 B 相同的属性,但需要有不同的方式 methodY()
并且有不同的 equals/hashcode.
那么,我如何才能让 B
实现唯一的 methodX()
而让 C 和 D 实现 methodY()
而无需返回 null
或在 methodY()
对于 B
?
您需要将 class B 声明为抽象
public abstract class B extends A{
public Foo medhodX(){
// stuff
}
}
通过声明class抽象你允许他不实现所有抽象方法(来自superclass或实现的接口)。所以你可以只实现一个抽象方法并强制child class实现所有剩余的抽象方法。
假设我的代码有这样的结构:
public abstract class A{
public abstract Foo methodX();
public abstract Bar methodY();
}
public class B extends A {
public Foo methodX(){
// stuff
}
public Bar methodY(){
// more stuff
}
}
public class C extends A {
public Foo methodX() {
// stuff
}
public Bar methodY(){
// What to do?
}
}
public class D extends C {
public Bar methodY() {
// do stuff
}
}
public class F extends C {
public Bar methodY() {
// do different stuff
}
}
我这样做的原因是因为我有多个 class
es 扩展 A
,都有共同的方法 methodX()
和 methodY()
而且我有多个 class
es extending B
都有一些与 B 相同的属性,但需要有不同的方式 methodY()
并且有不同的 equals/hashcode.
那么,我如何才能让 B
实现唯一的 methodX()
而让 C 和 D 实现 methodY()
而无需返回 null
或在 methodY()
对于 B
?
您需要将 class B 声明为抽象
public abstract class B extends A{
public Foo medhodX(){
// stuff
}
}
通过声明class抽象你允许他不实现所有抽象方法(来自superclass或实现的接口)。所以你可以只实现一个抽象方法并强制child class实现所有剩余的抽象方法。