Có đúng là các phương pháp bê tông ghi đè là một mùi mã? Bởi vì tôi nghĩ rằng nếu bạn cần ghi đè các phương thức cụ thể:
public class A{
public void a(){
}
}
public class B extends A{
@Override
public void a(){
}
}
nó có thể được viết lại như
public interface A{
public void a();
}
public class ConcreteA implements A{
public void a();
}
public class B implements A{
public void a(){
}
}
và nếu B muốn sử dụng lại a () trong A, nó có thể được viết lại thành:
public class B implements A{
public ConcreteA concreteA;
public void a(){
concreteA.a();
}
}
mà không yêu cầu kế thừa để ghi đè phương thức, điều đó có đúng không?
virtual
từ khóa để hỗ trợ ghi đè. Vì vậy, vấn đề được thực hiện nhiều hơn (hoặc ít hơn) mơ hồ bởi các chi tiết của ngôn ngữ.
final
sửa đổi tồn tại chính xác cho các tình huống như thế này. Nếu hành vi của phương thức sao cho nó không được thiết kế để ghi đè, thì đánh dấu nó là final
. Mặt khác, mong rằng các nhà phát triển có thể chọn ghi đè lên nó.