Tôi hiểu TẠI SAO chúng ta cần Lớp Tóm tắt trong Java - để tạo các lớp con. Nhưng điều tương tự cũng có thể đạt được bằng lớp bê tông. ví dụ. Lớp con mở rộng phụ huynh. Ở đây cha mẹ có thể rất trừu tượng & bê tông. Vậy tại sao chúng ta có ABSTRACT ??Lớp trừu tượng khác với lớp bê tông như thế nào?
Trả lời
Lớp trừu tượng không thể được khởi tạo trực tiếp. Khai báo một lớp là abstract có nghĩa là bạn không muốn nó được khởi tạo và lớp đó chỉ có thể được kế thừa. Bạn đang áp đặt một quy tắc trong mã của mình.
Nếu bạn mở rộng ví dụ về mối quan hệ cha mẹ/con của bạn hơn nữa để bao gồm một lớp Person thì sẽ có ý nghĩa tốt đối với Person là abstract. Cha mẹ là một ý tưởng cụ thể và như vậy là đứa trẻ. Con người là một khái niệm trừu tượng trong thực tế cũng như trong mã.
Một lợi ích là bạn rõ ràng xác định và bảo vệ ý tưởng của lớp trừu tượng. Khi bạn khai báo một lớp như là một trừu tượng, không có cách nào mà bạn hoặc bất kỳ ai khác sử dụng mã của bạn sử dụng nó không chính xác bằng cách khởi tạo nó. Lý do này tương tự như lý do tại sao chúng tôi chỉ định các hàm và trường như công khai, riêng tư hoặc được bảo vệ. Nếu bạn khai báo một hàm hoặc thành viên riêng tư, bạn có hiệu lực bảo vệ nó khỏi truy cập không đúng từ mã máy khách. Các cá nhân có nghĩa là được sử dụng trong lớp và đó là nó. Các lớp trừu tượng có nghĩa là được kế thừa và đó là điều đó.
Bây giờ, bạn có phải sử dụng lớp trừu tượng và xác định các chức năng và trường là riêng tư thay vì công khai không? Không, bạn không. Nhưng những khái niệm này được cung cấp để giúp giữ mã sạch sẽ và được tổ chức tốt. Lớp trừu tượng được thực hiện trong tất cả các ngôn ngữ hướng đối tượng đến kiến thức của tôi. Nếu bạn nhìn xung quanh, bạn sẽ thấy rằng C++, C#, VB.NET vv tất cả đều sử dụng khái niệm này.
Một tốt hơn, ví dụ cụ thể:
Trong ví dụ trên lớp Shape nên trừu tượng bởi vì nó không phải là hữu ích ngày của riêng mình.
nhưng chúng ta có được lợi ích gì khi áp dụng quy tắc này? –
Sử dụng lại mã. Thực hiện hàm trong lớp trừu tượng và bây giờ tất cả các lớp con có phương thức được triển khai. Điều này thường được sử dụng khi triển khai thực hiện các giao diện và nhiều triển khai chia sẻ cùng một mã cho một số phương thức. –
Tôi nghĩ rằng cha mẹ/con/người là một tương tự xấu cho giải thích trừu tượng và thừa kế: một người luôn luôn là một đứa trẻ (của hai người khác) và nó là rất phổ biến rằng sau một thời điểm họ cũng là một phụ huynh (của một số khác người (s)). –
Lớp trừu tượng có nghĩa là tóm tắt chưa hoàn chỉnh. Nó cần một lớp khác để hoàn thành nó và/hoặc các chức năng của nó. Bạn cần mở rộng lớp trừu tượng. Nó sẽ hữu ích với một số lớp ví dụ. Trái cây tất cả các loại trái cây có cùng một tài sản giống như màu sắc. Nhưng bạn có thể có các thuộc tính khác nhau cho các loại trái cây khác nhau như là nó có màu như cam hay không, ví dụ như chuối, v.v.
nhưng điểm giống nhau có thể đạt được bằng một lớp bê tông. Tôi đang cố gắng để hiểu nếu có bất cứ điều gì vượt ra ngoài thực tế là lớp trừu tượng là có cho các lớp học là LOGICALLY không cụ thể hoặc là có cái gì nhiều hơn? –
Trong trường hợp đó, câu trả lời là không. Bạn có thể có toàn bộ ứng dụng của bạn (thậm chí 100KLOC +) trong một lớp. Nhưng chúng tôi không, và chúng tôi tạo ra các lớp khác nhau cho các thực thể khác nhau. Lớp trừu tượng cải thiện cấu trúc của chương trình –
Điểm trừu tượng không phải là tạo ra các lớp con. Đó là thêm về việc tạo Seams trong mã của bạn. Bạn muốn mã có thể kiểm tra và tách ra, dẫn đến mục tiêu cuối cùng của tính bảo trì. Vì lý do tương tự, trừu tượng cũng mua cho chúng ta khả năng thay thế một chút mã mà không có tác dụng phụ gợn sóng.
Tôi biết đây là câu hỏi cũ nhưng có vẻ như người đăng vẫn có một số câu hỏi về lợi ích của việc sử dụng lớp trừu tượng.
Nếu bạn là người duy nhất sẽ sử dụng mã của bạn thì thực sự không có lợi ích. Tuy nhiên, nếu bạn đang viết mã cho người khác sử dụng thì có một lợi ích. Ví dụ, bạn đã viết một khung bộ nhớ đệm nhưng muốn cho phép các máy khách tạo các lớp thực hiện bộ nhớ đệm của riêng chúng. Bạn cũng muốn theo dõi một số chỉ số, chẳng hạn như số lượng cache được mở, theo giả thuyết.lớp trừu tượng của bạn có thể trông giống như thế này:
public abstract class AbstractCache {
public final void open() {
... // Do something here to log your metrics
openImpl();
}
protected abstract void openImpl() { }
}
On riêng lớp AbstractCache là vô ích và bạn không muốn khách hàng để cố gắng thể hiện hóa một và sử dụng nó như một bộ nhớ cache, mà họ sẽ có thể làm nếu lớp học được cụ thể. Bạn cũng muốn đảm bảo rằng họ không thể bỏ qua ghi nhật ký số liệu của bạn, điều họ có thể thực hiện nếu bạn chỉ cung cấp cho họ giao diện Bộ nhớ cache.
Lớp trừu tượng có nghĩa là được sử dụng làm lớp cơ sở mà từ đó các lớp khác bắt nguồn. Lớp dẫn xuất dự kiến sẽ cung cấp các triển khai thực hiện cho các phương thức không được triển khai trong lớp cơ sở. Một lớp học có nguồn gốc mà thực hiện tất cả các chức năng còn thiếu được gọi là một lớp bê tông
Theo hiểu biết của tôi
Tóm tắt Lớp là một lớp mà chỉ mô tả hành vi nhưng không thực hiện nó. Hãy xem xét ví dụ Java này cho Abstract Class:
public interface DoSomething(){
public void turnOnTheLight();
}
bê tông Lớp là những, những chất này được thực hiện. Ví dụ:
public abstract class A(){
public void doIt();
}
public class B extends A(){
public void doIt(){
//concrete method
System.out.println(“I am a Concrete Class Test”);
}
}
Nói cách khác, Một lớp bê tông trong java là bất kỳ lớp như vậy trong đó có thực hiện tất cả các thành viên được thừa hưởng của nó hoặc từ giao diện hoặc lớp trừu tượng.
- 1. Lớp bê tông với các thành viên loại trừu tượng
- 2. Lớp cơ sở trừu tượng so với lớp bê tông như một SuperType
- 3. InstantiationException trong JAXB Unmarshalling (lớp cơ sở trừu tượng, với lớp con bê tông @XmlSeeAlso)
- 4. Tìm tất cả các lớp bê tông mà thực hiện lớp trừu tượng trong nhật thực
- 5. Lấy tên Lớp Bê tông từ Lớp Tóm tắt
- 6. Phương pháp bê tông đúc sẵn trong lớp trừu tượng sử dụng phpunit
- 7. C# bê tông ghi đè chung lớp
- 8. Hibernate tạo proxy của các lớp bê tông như thế nào?
- 9. Thuộc tính trừu tượng với bộ thu công khai, xác định thiết lập riêng trong lớp bê tông có thể?
- 10. Chế tạo một lớp bê tông bằng EasyMock
- 11. làm thế nào để đạt được bảng cho mỗi lớp bê tông khi lớp cơ sở là trừu tượng trong nhibernate thông thạo?
- 12. Cách triển khai bộ xương khác với một lớp trừu tượng thông thường như thế nào?
- 13. Tại sao Java cho phép đa kế thừa từ giao diện nhưng không phải từ lớp trừu tượng/bê tông
- 14. Hai giao diện và một lớp bê tông trong WCF
- 15. tập tin tiêu đề riêng biệt cho các lớp bê tông - C++
- 16. một lớp trừu tượng được thừa hưởng một vấn đề khác lớp trừu tượng
- 17. Lớp trừu tượng bắt nguồn từ lớp không trừu tượng
- 18. lớp trừu tượng tĩnh
- 19. Lớp trừu tượng php mở rộng một lớp trừu tượng khác
- 20. Lớp hoặc Lớp cơ sở trừu tượng?
- 21. Làm cách nào để tìm "lớp bê tông" của mô hình django baseclass
- 22. thành viên C# Mocking Giao diện của một lớp bê tông với Moq
- 23. Refactoring lớp trừu tượng trong C#
- 24. AS3 - Lớp trừu tượng
- 25. Thừa kế các lớp bê tông có phải là ác quỷ không?
- 26. Nhiều lớp trừu tượng có nguồn gốc?
- 27. Scala PartialFunctions từ bê tông
- 28. Java - Ghi đè tham số kiểu đối tượng với loại bê tông
- 29. Builder design pattern - Không có lớp trừu tượng/giao diện
- 30. JAXB và lớp trừu tượng
Animal animal = new Animal(); << động vật gì? trong nhiều trường hợp, điều này không có ý nghĩa, do đó các lớp trừu tượng. Bạn không thể tạo một cá thể trực tiếp. Nó phải là một kiểu phụ như một con mèo hay con chó hay bất cứ điều gì – Polity
lập trình giống nhau có thể đạt được nếu chúng ta có động vật như một lớp bê tông. Tôi chỉ đang cố gắng hiểu lý do đằng sau việc giới thiệu một khái niệm về TÓM TẮT bởi những người sáng tạo java. –
Nó giới hạn sự thừa của mã và cũng làm tăng hiệu quả. Hơn nữa nó có thể áp đặt rằng một số chức năng không đầy đủ của lớp trừu tượng được sử dụng trong lớp bê tông. Giống như kết hợp một giao diện và lớp với nhau và bạn không phải thực hiện giao diện trong tất cả các lớp cụ thể của bạn. –