Hiện đã có nhiều SO câu hỏi về lý do tại sao không có trừu tượng tĩnh phương pháp/lĩnh vực như vậy, nhưng tôi đang tự hỏi về cách người ta sẽ đi về thực hiện psuedo-mã sau:Phương pháp "Tóm tắt tĩnh" - làm cách nào?
class Animal {
abstract static int getNumberOfLegs(); // not possible
}
class Chicken inherits Animal {
static int getNumberOfLegs() { return 2; }
class Dog inherits Animal {
static int getNumberOfLegs() { return 4; }
Dưới đây là vấn đề Giả sử rằng tôi muốn đảm bảo rằng mọi lớp thừa hưởng Animal
để chứa phương thức getNumberOfLegs()
(ví dụ như một giao diện, ngoại trừ tôi muốn lớp trừu tượng triển khai một số phương thức chung cho tất cả các lớp con, do đó giao diện thuần túy không hoạt động ở đây). getNumberOfLegs()
rõ ràng nên là một phương pháp tĩnh (giả sử rằng trong một thế giới hoàn hảo, chúng tôi không 'có tê liệt gà và chó vì vậy getNumberOfLegs
không phải là trường hợp phụ thuộc).
Nếu không có phương pháp "trừu tượng tĩnh"/trường, người ta có thể rời phương thức ra khỏi lớp Animal
, thì có nguy cơ một số lớp con không có phương pháp đó. Hoặc người ta có thể làm cho getNumberOfLegs
một phương pháp thể hiện, nhưng sau đó người ta phải khởi tạo một lớp để tìm hiểu xem có bao nhiêu chân mà động vật có - mặc dù nó không cần thiết.
Làm thế nào để người ta thường thực hiện tình huống này?
EDIT: Ở đây cách tôi có thể sử dụng tính năng này. Giả sử (bây giờ điều này là vô lý, nhưng dù sao đi nữa ...) rằng số chân của mỗi con vật là duy nhất, vì vậy tôi có thể có một cái gì đó như:
Animal getModelAnimal(int numberOfLegs) {
if (numberOfLegs == Chicken.getNumberOfLegs()) return new Chicken();
else if (numberOfLegs == Dog.getNumberOfLegs()) return new Dog();
}
-1: Bạn không thể nói điều đó nói chung. phương pháp trừu tượng không phải luôn luôn không có ý nghĩa (xem bài viết của tôi). – Simon
Đã chỉnh sửa câu trả lời của tôi để phản ánh điều này. –
Câu hỏi của tôi có nghĩa là không thuyết phục về ngôn ngữ (tôi đã gặp phải vấn đề tương tự trong C# trước đây). Tôi có thể thấy lý do tại sao không có công cụ sửa đổi "trừu tượng tĩnh" trong ngôn ngữ, nhưng tôi quan tâm nhiều hơn để xem cách người ta có thể thực hiện một cách rõ ràng vấn đề tôi đã nêu trong câu hỏi. – polyglot