Lớp học có cần phải có từ khóa trừu tượng trước nó không? Hoặc có cần phải có các phương pháp chưa được thực hiện (trừu tượng) không? Có thể mở rộng bất kỳ lớp học bình thường nào không?Một lớp không trừu tượng có thể được mở rộng (được kế thừa từ) trong Java không?
Trả lời
Có thể mở rộng bất kỳ lớp bình thường nào không?
Có :) Trừ khi nó có công cụ sửa đổi cuối cùng.
1. Cố định từ ngữ của bạn một chút ... :) – Tudor
Có, tất cả các phương thức không phải là cuối cùng (tĩnh cũng có dạng khác chút), có thể bị ghi đè, trừ khi chính lớp đó được khai báo cuối cùng. Các phương thức trừu tượng chỉ được sử dụng nếu bạn không cung cấp bất kỳ triển khai nào trong lớp cơ sở.
Có, bạn có thể mở rộng một lớp mà không cần phải định nghĩa là lớp trừu tượng. Điều này có nghĩa là bạn sẽ ghi đè các phương pháp. Ví dụ, bạn có thể làm cho một lớp
DifferentString extends String
sau đó,
public String toString()
{
return "Something different";
}
này sẽ có nghĩa là bạn có thể thay đổi hành vi ban đầu của lớp cha.
tham khảo:
http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
Như những người khác cũng đã nói, vâng - nhưng nó là thực hành tốt để tránh làm như vậy nếu bạn có thể giúp nó, bởi vì bạn có thể kết thúc với những gì được gọi là fragile base class vấn đề dễ dàng hơn.
Vì vậy, lớp cơ sở mong manh về cơ bản, những thay đổi trong một phương thức siêu lớp dẫn đến hành vi không mong muốn trong lớp con. Nhưng liệu có thể, nếu cùng một phương thức được ghi đè trong lớp con? –
có, nếu phương pháp ghi đè đó phụ thuộc vào bất kỳ phương thức nào khác trong lớp cha. Một thay đổi đơn giản đối với lớp cha có thể dẫn đến hành vi không mong muốn trong lớp con, ngay cả khi lớp cha vẫn hoàn thành hợp đồng của nó. – Robert
Từ trang Wikipedia, tôi nhận được nó bằng cách sử dụng Giao diện giải quyết vấn đề này.Tuy nhiên, việc sử dụng từ khóa trừu tượng này ngăn chặn vấn đề này như thế nào? (hoặc, làm thế nào không sử dụng các từ khóa trừu tượng gây ra nó?) Xin lỗi, tôi không hiểu hoàn toàn. –
Không cần phải có từ trừu tượng, từ trừu tượng sẽ không cho phép bạn tạo một thể hiện của lớp đó trực tiếp, nếu bạn sử dụng từ trừu tượng, bạn chỉ có thể tạo một thể hiện của các lớp mở rộng lớp trừu tượng.
AbstractClass abs = new ChildClass();
Có một số nhầm lẫn về khái niệm ở đây. Các phương thức chưa thực hiện nằm trong một giao diện và bạn có thể triển khai giao diện đó.
Bạn có thể mở rộng bất kỳ lớp nào miễn là nó không phải là cuối cùng.
Chỉnh sửa: Điều tôi muốn nói là tốt hơn nên đặt các phương thức chưa triển khai trong giao diện. Xin lỗi vì những từ ngữ nghèo nàn. Các lớp trừu tượng cũng có thể có các phương thức chưa được thực hiện, mặc dù bạn sẽ kết thúc với một hệ thống phân cấp phức tạp và cứng nhắc. .
Một lớp trừu tượng cũng chứa các phương thức chưa được thực hiện ... – quaylar
Tôi có đúng để nói rằng một lớp trừu tượng PHẢI có ít nhất một phương thức chưa được thực hiện? –
Không. Có thể hoặc không có phương pháp. –
Có, nhưng nếu lớp học được đánh dấu là cuối cùng, nó không thể được mở rộng.
class Foo {
//some code here
}
class Boo extends Foo {
}
- 1. java lớp con: nhiều nhà xây dựng được kế thừa từ lớp cha trừu tượng
- 2. Lớp trừu tượng được thừa kế với JPA (+ Hibernate)
- 3. Các lớp học kế thừa từ lớp trừu tượng
- 4. Lớp trừu tượng php mở rộng một lớp trừu tượng khác
- 5. 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
- 6. Bạn có thể tạo một đối tượng trong Javascript không được kế thừa từ Object không?
- 7. Tạo một lớp không được thừa kế
- 8. Lớp trừu tượng bắt nguồn từ lớp không trừu tượng
- 9. Không thể sử dụng lớp Meta của mô hình Django kế thừa để định cấu hình trường được xác định trong mô hình trừu tượng được thừa kế
- 10. Phải triển khai phương pháp trừu tượng được thừa kế
- 11. Nguyên tắc thay thế Liskov có áp dụng cho loại phụ được kế thừa từ lớp trừu tượng không?
- 12. Vấn đề trừu tượng/mở rộng Java
- 13. những gì phải được thực hiện từ một lớp trừu tượng trong java?
- 14. Trong C hoặc C++, có cách nào để mở rộng một lớp không thừa kế không?
- 15. Có thể một kết thúc Groovy mở rộng một lớp trừu tượng
- 16. Có thể một lớp trừu tượng mở rộng một lớp trừu tượng khác và tăng chức năng
- 17. Một python @classmethod có thể được kế thừa không?
- 18. Kiểm thử đơn vị một lớp kế thừa từ lớp trừu tượng
- 19. C# lớp trừu tượng kế thừa trường tĩnh
- 20. Tại sao không phải là một lớp được thừa kế từ một lớp trừu tượng với một mệnh đề where đúc đến lớp chung thấp nhất
- 21. 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
- 22. Lớp 'Phòng' là trừu tượng; không thể được khởi tạo
- 23. Không thể truyền một lớp có nhiều thừa kế
- 24. Có thể phát hiện ngữ cảnh lớp trong một phương thức tĩnh được kế thừa không?
- 25. Thừa kế giao diện: có thể mở rộng các thuộc tính có thể không?
- 26. Các biến cấp lớp riêng có được kế thừa không?
- 27. Trường tĩnh có được kế thừa không?
- 28. Có thể trong SASS để kế thừa từ một lớp trong một tệp khác không?
- 29. Được đồng bộ kế thừa trong Java?
- 30. Tại sao toán tử gán của lớp cha mẹ không thể truy cập từ lớp được thừa kế đối tượng
Xem http://docs.oracle.com/javase/tutorial/java/javaOO/classes.html – DNA
gì đã xảy ra khi bạn cố gắng nó :-) – kleopatra