2009-06-23 39 views
13

Giả sử một lớp Xe có phương thức được gọi là "StartEngine" và trong phân lớp của tôi có tên "Máy bay" tôi muốn ghi đè "StartEngine". Nếu tôi sử dụng C#, tôi nên sử dụng từ khóa "ghi đè" trong khai báo/định nghĩa phương thức StartEngine của Máy bay.Mục tiêu-C tương đương với "ghi đè" trong C#

Lý do tôi hỏi, là nếu thay vì "StartEngine" tôi nhập "startengine", C# sẽ khiếu nại, nhưng Objective-C sẽ không, nhờ vào từ khóa đó.

Trả lời

15

Tất cả các phương pháp lớp học và ví dụ trong Objective-C được cử động và có thể được ghi đè trong các lớp con. Không có gì giống như từ khóa của C# 'override', hoặc giống như từ khóa virtual của nó.

+0

Điều đó có ý nghĩa .. Tôi vừa học được phương pháp là gì trong mục tiêu-c: một con trỏ tới hàm thực tế một tên và một mã hóa ... Không có gì thêm. –

+0

Sau đó nó có đa hình không? – Henri

+0

Tất cả các phương thức trong Objective-C đều có tính đa hình, bao gồm cả các phương thức lớp. (Điều này không giống như các phương thức "tĩnh" trong C#, Java và C++, không đa hình.) –

11

Đúng - chắc chắn là có thể. Không có từ khóa ghi đè mặc dù. Chỉ cần khai báo một hàm có chữ ký giống hệt nhau trong lớp con của bạn, và nó sẽ được gọi thay vì phiên bản siêu lớp.

Đây là những gì phương pháp startEngine Airplane của thể hình như:

- (void)startEngine 
{ 
    // custom code 

    // call through to parent class implementation, if you want 
    [super startEngine]; 
} 
+2

Tôi vừa làm rõ câu hỏi. Tôi biết trọng là có thể trong mục tiêu-c, tôi chỉ muốn trình biên dịch để kiểm tra tôi thực sự ghi đè một phương pháp, và không tạo ra một cái mới trong phân lớp. –

+0

Ahh - Tôi hiểu rồi. Thật không may, trình biên dịch Objective-C không cung cấp bất kỳ cách nào để làm điều đó. Heck - thậm chí gọi một hàm không tồn tại chỉ là một cảnh báo! :-) Tôi nghĩ rằng đặt cược tốt nhất của bạn trong trường hợp đó sẽ là làm cho việc triển khai phương thức của lớp cơ sở trừu tượng ném NSExceptions. –

2

Tất cả các phương pháp trong Mục tiêu-C đều có thể ghi đè, bạn chỉ cần viết một phương thức cho cùng một chữ ký.

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