Các nhà xây dựng gần với phương pháp tĩnh hơn là các phương pháp "thông thường". Giống như phương pháp tĩnh, chúng có thể bị quá tải, nhưng không được ghi đè số. Đó là, họ không được thừa kế nhưng có thể được định nghĩa lại.
public BaseClass
{
public BaseClass(String s) { ... }
public static void doIt (String s) { ... }
}
public SubClass extends BaseClass
{
public SubClass(String s) { ... }
public static void doIt (String s) { ... }
}
public SubClass2 extends BaseClass
{
}
new SubClass("hello");
SubClass.doIt("hello");
new SubClass2("hello"); // NOK
SubClass2.doIt("hello"); // NOK
nhà xây dựng và phương pháp tĩnh là không bao giờ cử động (hầu như) - Bạn luôn biết loại bê tông bạn nhanh chóng hoặc lớp bê tông của phương pháp tĩnh.Đó là lý do tại sao nó không có ý nghĩa để có một hàm dựng trừu tượng trừu tượng và phương thức tĩnh trừu tượng. Đó là lý do tại sao bạn cũng không thể chỉ định hàm tạo và phương thức tĩnh trong các giao diện .
Bạn thậm chí có thể nghĩ đến constructor như tĩnh phương pháp nhà máy (và xem corresponding pattern):
MyClass obj = new MyClass(); // the way it is
MyClass obj = MyClass.new(); // think of it like this
Trường hợp duy nhất tôi nhìn thấy nơi nó sẽ làm cho tinh thần để xác định constructor trừu tượng hoặc phương pháp tĩnh trừu tượng sẽ nếu phản ánh được sử dụng. Trong trường hợp này, bạn có thể đảm bảo rằng tất cả các lớp con sẽ xác định lại phương thức tĩnh tương ứng hoặc hàm tạo. Nhưng phản ánh là một chủ đề khác ...
Lưu ý: bằng các ngôn ngữ như Smalltalk, nơi các lớp là đối tượng thông thường, bạn có thể ghi đè phương pháp tĩnh và có hàm tạo trừu tượng. Nhưng nó không áp dụng cho Java vì các lớp không phải là các đối tượng "thông thường" ngay cả khi bạn có thể nhận được chúng với sự phản chiếu.
Có vẻ như nhà xây dựng là một chi tiết triển khai và do đó buộc các lớp con được xây dựng theo một cách nhất định sẽ là một điều xấu. Nếu bạn muốn xây dựng gói gọn, hãy sử dụng mẫu nhà máy tĩnh. –
Hình như anh ta muốn cái gì đó không thể với các genericss hiện tại, cấu trúc subtyping/parameter-taking constructor. – Dykam
Bạn đang cố gắng đạt được điều gì? Có lẽ có một cách khác để nhìn vào nó. – fre0n