Tôi có thể định nghĩa một lớp trừu tượng mà không cần thêm một phương thức trừu tượng không?
Tôi có thể định nghĩa một lớp trừu tượng mà không cần thêm một phương thức trừu tượng không?
Câu trả lời:
Tất nhiên.
Khai báo một lớp trừu tượng chỉ có nghĩa là bạn không cho phép nó được khởi tạo một mình.
Khai báo một phương thức trừu tượng nghĩa là các lớp con phải cung cấp một triển khai cho phương thức đó.
Cả hai là những khái niệm riêng biệt, mặc dù rõ ràng là bạn không thể có một phương thức trừu tượng trong một lớp không trừu tượng. Bạn thậm chí có thể có các lớp trừu tượng với final
các phương thức nhưng không bao giờ ngược lại.
Có, bạn có thể làm điều đó. Tại sao bạn không thử làm điều đó?
Có bạn có thể. Lớp trừu tượng được sử dụng trong java biểu thị rằng bạn không thể tạo một đối tượng của lớp. Và một phương thức trừu tượng mà các lớp con phải cung cấp một triển khai cho phương thức đó.
Vì vậy, bạn có thể dễ dàng định nghĩa một lớp trừu tượng mà không cần bất kỳ phương thức trừu tượng nào.
Đối với ví dụ:
public abstract class AbstractClass{
public String nonAbstractMethodOne(String param1,String param2){
String param = param1 + param2;
return param;
}
public static void nonAbstractMethodTwo(String param){
System.out.println("Value of param is "+param);
}
}
Điều này là tốt.
CÓ Bạn có thể tạo lớp trừu tượng với bất kỳ phương thức trừu tượng nào, ví dụ tốt nhất về lớp trừu tượng không có phương thức trừu tượng là HttpServlet
Phương thức trừu tượng là một phương thức không có phần thân, nếu bạn đã khai báo ít nhất một phương thức vào lớp, thì lớp đó phải được khai báo là một trừu tượng bắt buộc của nó NHƯNG nếu bạn đã khai báo lớp trừu tượng thì nó không bắt buộc phải khai báo phương thức trừu tượng bên trong lớp.
Bạn không thể tạo các đối tượng của lớp trừu tượng, có nghĩa là không thể khởi tạo nó.
Có, bạn có thể khai báo một lớp mà bạn không thể tự khởi tạo chỉ với các phương thức đã có triển khai. Điều này sẽ hữu ích nếu bạn muốn thêm các phương thức trừu tượng trong tương lai hoặc nếu bạn không muốn lớp được khởi tạo trực tiếp ngay cả khi nó không có thuộc tính trừu tượng.
vâng, chúng ta có thể khai báo một lớp trừu tượng mà không cần bất kỳ phương thức trừu tượng nào. mục đích của việc khai báo một lớp là trừu tượng không phải để khởi tạo lớp đó.
hai trường hợp vậy
1) lớp trừu tượng với các phương thức trừu tượng.
loại lớp này, chúng ta phải kế thừa một lớp từ lớp trừu tượng này và phải ghi đè các phương thức trừu tượng trong lớp của chúng ta, ví dụ: lớp GenricServlet
2) lớp trừu tượng không có phương thức trừu tượng.
loại lớp này, chúng ta phải kế thừa một lớp từ lớp trừu tượng này, ví dụ: mục đích của lớp HttpServlet là mặc dù bạn nếu bạn không triển khai logic của mình trong lớp con, bạn có thể nhận được logic cha
Có, chúng ta có thể có một lớp trừu tượng mà không có Phương thức trừu tượng vì cả hai đều là những khái niệm độc lập. Khai báo một lớp trừu tượng nghĩa là nó không thể được khởi tạo một mình và chỉ có thể được phân lớp. Khai báo một phương thức trừu tượng có nghĩa là Phương thức sẽ được định nghĩa trong lớp con.
Có, bạn có thể định nghĩa một lớp trừu tượng mà không cần một phương thức trừu tượng. Tuy nhiên, nếu không có phương pháp nào bên trong, bạn nên sử dụng một giao diện
đúng, bạn có thể làm điều đó.
khai báo lớp trừu tượng nghĩa là lớp đó sẽ không được khởi tạo bởi bất kỳ lớp nào khác.
và phải có ít nhất một phương thức trừu tượng bên trong nó và ý nghĩa của việc đó bạn có thể khai báo phương thức trừu tượng trong lớp đó nếu bạn không khai báo phương thức hơn là được.
thí dụ:
public abstract class abs {
protected int cx = 0, cy = 0;
public void p() {
System.out.print("hello");
}
}
điều này chắc chắn sẽ hoạt động.
Có bạn có thể. Đôi khi bạn có thể được hỏi câu hỏi này rằng mục đích của việc này là gì? Câu trả lời là: đôi khi chúng ta phải hạn chế lớp khởi tạo bởi chính nó. Trong trường hợp đó, chúng tôi muốn người dùng mở rộng lớp Tóm tắt và khởi tạo lớp con
Bạn có thể, câu hỏi trong tâm trí của tôi là nhiều hơn bạn nên. Ngay từ đầu, tôi sẽ nói rằng không có câu trả lời nào khó và nhanh cả. Hãy làm điều đúng đắn cho hoàn cảnh hiện tại của bạn.
Đối với tôi, thừa kế ngụ ý một mối quan hệ 'là một'. Hãy tưởng tượng một lớp chó, có thể được mở rộng bởi các loại phụ chuyên biệt hơn (Alsatian, Poodle, v.v.). Trong trường hợp này, làm cho lớp con chó trở nên trừu tượng có thể là điều đúng đắn nên làm vì kiểu con là con chó. Bây giờ chúng ta hãy tưởng tượng rằng những con chó cần một vòng cổ. Trong trường hợp này, thừa kế không có ý nghĩa: thật vô nghĩa nếu có một mối quan hệ 'là một' giữa chó và vòng cổ. Đây chắc chắn là mối quan hệ 'có-phải-có', cổ áo là vật hợp tác. Làm cho cổ áo trừu tượng chỉ để chó có thể có một cái không có ý nghĩa.
Tôi thường thấy rằng các lớp trừu tượng không có phương thức trừu tượng đang thực sự thể hiện mối quan hệ 'has-a'. Trong những trường hợp này, tôi thường thấy rằng mã có thể được tính toán tốt hơn mà không cần sử dụng kế thừa. Tôi cũng thấy rằng các lớp trừu tượng không có phương thức trừu tượng thường là mùi mã và ít nhất sẽ dẫn đến các câu hỏi được nêu ra trong một bài đánh giá mã.
Một lần nữa, điều này là hoàn toàn chủ quan. Cũng có thể có những tình huống khi một lớp trừu tượng không có phương thức trừu tượng có ý nghĩa, nó hoàn toàn phụ thuộc vào việc giải thích và biện minh. Đưa ra quyết định tốt nhất cho bất cứ điều gì bạn đang làm.
Trên thực tế, không có nghĩa là nếu một lớp trừu tượng không có bất kỳ phương thức trừu tượng nào. Một lớp trừu tượng giống như một người cha. Người cha này có một số đặc tính và hành vi, khi bạn còn nhỏ muốn trở thành con của người cha, người cha nói rằng đứa trẻ (bạn) phải theo cách này, đó là MOTO của chúng tôi, và nếu bạn không muốn làm như vậy, bạn không phải là con tôi.
WindowDecorator
vàCoffeeDecorator
đều làabstract
các lớp, nhưng không bao gồm mộtabstract
phương thức.