Đó là tất cả về hành vi.
Một lớp khai báo một hành vi nhất định (giao diện hoặc hợp đồng):
Đó lớp cũng có thể xác định rằng hành vi (thực hiện) hoặc đại biểu hoặc toàn bộ hoặc một phần của nó với bất kỳ lớp con của nó:
Trong giả:
class Animal {
method walk()
method speak()
method jump()
// ... here goes the implementation of the methods
}
Qua subclassing bạn thực hiện một kế thừa lớp khác lớp hành vi.
Khi thi hành một phương pháp được giao cho các lớp con, phương pháp này được gọi là trừu tượng trong lớp cơ sở và các ngôn ngữ như Java, lớp toàn bộ cơ sở trở nên trừu tượng cũng như:
abstract class Animal {
method walk() {
doWalk()
}
method speak() {
print "hi, I am an animal!"
}
abstract method jump() // delegated to specific animals
}
class Horse inherits from Animal {
override method walk() {
doWalkLikeAHorse()
}
override method speak() {
print "hi, I am a horse!"
}
override method jump() {
doJumpLikeAHorse()
}
}
class Elephant inherits from Animal {
override method walk() {
doWalkLikeAnElephant()
}
override method speak() {
print "hi, I am an elephant!"
}
override method jump() {
throw error "Sorry, I can't jump!!"
}
}
Một hành vi của lớp là theo mặc định virtual, có nghĩa là mọi phương thức lớp có thể bị ghi đè bởi bất kỳ lớp con nào. Đây là cách nó hoạt động trong các ngôn ngữ như C# và Java, nhưng không nhất thiết phải trong C++, ví dụ.
Trong chất, hành vi của một lớp cơ sở chỉ là ảo và có thể giả định "nhiều" (nhiều) "hình thức khác nhau" (morphs) khi lớp con ghi đè lên rằng hành vi ảo. Đó là lý do tại sao nó được gọi là đa hình. Trong mã giả:
function makeAnimalSpeak(Animal animal) {
animal.speak();
}
makeAnimalSpeak(new Elephant()) // output: "hi, I am an elephant"
makeAnimalSpeak(new Horse()) // output: "hi, I am a horse"
Những người khác đã cung cấp cho bạn ví dụ tốt hơn tại đây.
Trong các ngôn ngữ như C# và Java, bạn có ý tưởng về giao diện (không tồn tại trong C++), đây chỉ là tuyên bố về hành vi. Một giao diện, không giống như một lớp, không có nghĩa vụ thực hiện một hành vi. Nó chỉ là một tuyên bố. Bất kỳ lớp nào cũng có thể thực hiện hành vi đó, bất kể lớp cơ sở mà chúng kế thừa từ đó là gì.Trong giả:
interface FlyingBeing {
method fly()
}
class FlyingPig inherits from Animal implements FlyingBeing {
method fly() {
print "hey, look at me, I am a flying pig!!"
}
}
Guys, poster rõ ràng không phải là một người nói tiếng Anh bản xứ, và anh ấy yêu cầu chúng tôi giúp anh ta hiểu sự khác biệt giữa hai từ tiếng Anh được sử dụng chủ yếu trong chương trình từ sách giáo khoa của ông được viết bằng tiếng Ả Rập. Vì anh ấy không biết tiếng Anh tốt, anh ấy hy vọng rằng một đoạn mã trong một ngôn ngữ anh ta hiểu sẽ giúp anh ta có được ý chính mà không cần phải đọc một vài đoạn giải thích bằng tiếng Anh. Cho anh ta nghỉ ngơi. – StriplingWarrior
@Strip Đẹp thoery, nhưng OP có một lệnh tốt của ngôn ngữ tiếng Anh: http://stackoverflow.com/questions/7325073/how-could-i-get-over-my-programming-problems. –
@chibacity: Ah, tốt. Vì vậy, nhiều để cho mọi người lợi ích của sự nghi ngờ. – StriplingWarrior