2012-03-06 67 views
5

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?

+1

Xem http://docs.oracle.com/javase/tutorial/java/javaOO/classes.html – DNA

+1

gì đã xảy ra khi bạn cố gắng nó :-) – kleopatra

Trả lời

4

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

1. Cố định từ ngữ của bạn một chút ... :) – Tudor

4

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ở.

1

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

1

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.

+0

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? –

+1

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

+0

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. –

2

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(); 
0

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. .

+0

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

+0

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? –

+0

Không. Có thể hoặc không có phương pháp. –

1

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 { 

} 
Các vấn đề liên quan