Tôi có giao diện A, mà tôi phải cung cấp một số triển khai khác nhau. Tuy nhiên, những triển khai đó chia sẻ một số phương thức trợ giúp, vì vậy Tôi đã chuyển các phương thức đó sang một lớp cơ sở trừu tượng.Điều gì (không) tuyên bố khi triển khai giao diện với lớp trừu tượng?
Interface A {
void doX();
}
abstract Class B implements A {
protected void commonY() {
// ...
}
@Override
public abstract void doX();
}
Class C extends B {
@Override
public void doX() {
// ...
}
}
Class D extends B {
@Override
public void doX() {
// ...
}
}
Mã của tôi làm việc như mong đợi, nhưng tôi có một vài câu hỏi:
Tôi có nên khai báo trừu tượng Phương pháp DOX() trong Class B? Tại sao không)?
Tôi có nên khai báo rõ ràng "triển khai A" trên Class C và D không? Tại sao không)?
Lợi ích của giải pháp này là khi lớp X triển khai Z nhưng yêu cầu chức năng của phương thức commonY được giới thiệu, nó có thể chuyên lớp B. –
Điều này phụ thuộc vào cách sử dụng. Nếu B là cơ sở cho nhiều lần triển khai A, thì nó sẽ triển khai A. Giống như AbstractList hoặc AbstractCollection. – Robin