Tôi muốn biết mục đích của một hàm tạo cho lớp trừu tượng là gì; vì chúng tôi không khởi tạo các lớp trừu tượng, tại sao chúng ta lại cần một nhà xây dựng như vậy?Việc sử dụng tạo một hàm tạo cho một lớp trừu tượng trong Java là gì?
Trả lời
sẽ có những lúc bạn có một số khởi tạo chung của các biến mẫu mà tất cả các lớp kế thừa cần phải thiết lập. Bạn khởi tạo một lớp trừu tượng khi bạn mở rộng nó và lớp bê tông đó có một hàm tạo sẽ cung cấp các tham số cho hàm tạo của lớp trừu tượng.
Chúng vẫn có thể được gọi bởi các hàm tạo của các lớp kế thừa từ đó, làm cho việc tái cấu trúc mã sử dụng tốt để có một hàm tạo trong lớp trừu tượng.
Nếu bạn có các trường cuối cùng chưa được khởi tạo trong lớp trừu tượng, bạn cần phải khởi tạo chúng trong một hàm tạo.
Ví dụ:
abstract class A {
final int x;
}
sẽ không biên dịch nếu không có một hàm tạo gán cho x
.
Nếu lớp học của bạn không khai báo hàm tạo, javac sẽ tạo một hàm tạo no-arg, do-nothing cho bạn. Sau đó, khi lớp con của bạn được khởi tạo, nó sẽ gọi hàm tạo non-op được tạo ra và cuộc sống là tốt.
Tuy nhiên, nếu lớp của bạn khai báo bất kỳ hàm tạo nào, javac sẽ KHÔNG tạo một cho bạn. Trong trường hợp đó, hàm tạo lớp con cần gọi một cách rõ ràng hàm khởi tạo của lớp cha. Nếu không, bạn sẽ không thể khởi tạo thành viên của lớp cha, như câu trả lời ở trên đề cập đến.
Các nhà xây dựng cho các lớp trừu tượng được sử dụng bởi các lớp con (được gọi từ các hàm tạo lớp con sử dụng super(params)
).
Bạn nên thực hiện các công cụ xây dựng này protected
để làm rõ điều đó.
Bạn không khởi tạo các lớp trừu tượng nhưng hàm tạo được gọi khi một lớp con được khởi tạo.
Việc sử dụng có thể là để khởi tạo các thuộc tính phổ biến tức là.
import java.util.List;
import java.util.ArrayList;
abstract class BaseClass {
protected List list; // visible from subclasses
public BaseClass() {
System.out.println("to abstract...");
// common initialization to all subclasses
list = new ArrayList();
list.add("a");
list.add("a");
list.add("a");
}
}
class ConcreteClass extends BaseClass {
public ConcreteClass(){
// The list is initialized already
System.out.println("now it is concrete and the list is: = "+ this.list);
}
}
class TestAbstractClass {
public static void main(String [] args) {
BaseClass instance = new ConcreteClass();
}
}
Output
$ java TestAbstractClass
to abstract...
now it is concrete and the list is: = [a, a, a]
De-sao chép phổ biến kiến thức/hành vi.
Ví dụ: một chiếc xe: tất cả các xe của bạn sẽ được xây dựng ra khỏi một cơ thể và bốn bánh xe và một động cơ. Vì vậy, bạn làm điều này một phần của việc xây dựng trong constructor cho lớp Car trừu tượng bằng cách gọi các hàm như Body(), Wheel (int x), Engine(). Mỗi lớp xe cụ thể sẽ có việc thực hiện riêng Body(), Wheel() và Engine() - nhưng tất cả họ sẽ thực hiện các bước tương tự để xây dựng chiếc xe từ họ, vì vậy không cần lặp lại các bước đó trong mỗi các lớp học. Trong trường hợp này, bạn thực hiện hành vi chung đó trong tổ tiên.
Tôi đồng ý, Constructors được tạo giả định sẽ có các phiên bản. Nếu bạn có nhiều mã chung, bạn có thể nghĩ đến việc tạo một Constructor nhưng tốt hơn là nên đặt nó theo phương thức init()
.
đây là lời khuyên không tốt, sau đó mọi lớp vô tính cần phải nhớ gọi siêu.init() và nó được nhanh chóng lộn xộn, đây là lời khuyên không chuẩn và thực sự xấu. –
- 1. Lớp trừu tượng là gì?
- 2. Tạo giao diện cho mẫu lớp trừu tượng trong C++
- 3. Phương thức khởi tạo riêng trong lớp trừu tượng
- 4. Sử dụng hàm tạo mẹ trong lớp con trong Java
- 5. Tạo một cây cú pháp trừu tượng cho mã nguồn java bằng cách sử dụng ANTLR
- 6. Java - thực tế là không có một hàm tạo lớp?
- 7. lợi ích bổ sung của việc tạo hàm tạo trong java là gì?
- 8. cách tạo một hàm tạo chung cho một lớp chung trong java?
- 9. Cách tạo một lớp Haystack SearchIndex trừu tượng
- 10. Cú pháp cho một hàm tạo mặc định cho một lớp chung là gì?
- 11. "trừu tượng" là gì?
- 12. Ưu điểm của việc sử dụng các đặc điểm trên các lớp trừu tượng là gì?
- 13. Lợi ích của việc sử dụng một hàm tạo?
- 14. Trường hợp sử dụng của các nhà thầu phụ trong các lớp trừu tượng là gì?
- 15. Gửi đối số cho một hàm tạo tĩnh trong Java?
- 16. Lớp 'Phòng' là trừu tượng; không thể được khởi tạo
- 17. Java tương đương với việc tạo một đối tượng ẩn danh trong C# là gì?
- 18. Sử dụng Java Reflection, làm thế nào để có được hàm tạo của một lớp xác định một lớp dẫn xuất của hàm tạo là args?
- 19. trả về một lớp trừu tượng từ một hàm
- 20. Việc sử dụng một đối tượng liên tục là gì?
- 21. Sử dụng Generics trong lớp trừu tượng
- 22. sử dụng hàm tạo riêng trong lớp
- 23. Tạo một lớp PHP -> Tạo một đối tượng của nó trong một lớp khác
- 24. Là một nhà xây dựng công cộng trong một lớp trừu tượng một mã số?
- 25. Một hàm tạo bản sao trong C++ là gì?
- 26. Tạo trừu tượng với CSS
- 27. "this()" làm gì trong một hàm tạo?
- 28. Gọi một hàm tạo từ một hàm tạo khác trong cùng một lớp
- 29. Java: Trường tĩnh trong lớp trừu tượng
- 30. Sử dụng hàm tạo trong một cuộc gọi hàm?
Ví dụ là javax.swing.AbstractAction –