深入Delphi编程(OOP)

豆豆网   技术应用频道   2007年11月19日  【字号: 收藏本文

内容摘要:OOP的英文全称是Object Oriented Programming,翻译过来就是面向对象编程。OOP是一种非常重要的编程思想。也许你会对这种抽象的东西不感兴趣,可是几乎任何一个高手都会告诉你:“语言并不重要,重要的是编程思想。”

  既然如此,那么这种抽象方法又有什么用呢?这个问题我们将在接下来的“多态”部分进行讨论。

  1.3 多态

  多态相对来说比较复杂一点。不过不要担心,它的内容比较少,而且如果以前的知识掌握得比较稳固的话,多态的概念是水到渠成的。

  先来讨论一下类型的兼容性问题。下面是一个例子:

  type
  TAnimal = Class
  Procedure Voice;virtual;
  ...
  end;  TDog = Class(TAnimal)
  Procedure Voice;Override;
  ...
  end;  implementation  Procedure TAnimal.Voice;virtual;
  Begin
  PlaySound('Anim.wav',0,snd_Async);
  End;  Procedure TDog.Voice;virtual;
  Begin
  PlaySound('Dog.wav',0,snd_Async);
  End;

  TDog类继承了TAnimal类,并重载了其中的Voice方法。PlaySound是一个WIN API函数,可以播放指定的wav文件。(这个函数的定义在MMSystem.pas文件中可以找到。)

  先看这段代码:

  var
  MyAnimal1, MyAnimal2: TAnimal;
  Begin
  MyAnimal1 := TAnimal.Create;
  MyAnimal2 := TDog.Create;
  ...

  在实现部分的第一行中,建立了一个TAnimal类型的对象,并将其赋予TAnimal类型的变量MyAnimal1。这是很正常的事。但在第二行中,建立了一个TDog类型的对象,并将其赋予了TAnimal类型的变量MyAnimal2。这看上去令人吃惊,但这些代码是完全合法的。

  众所周知,Pascal以及Object Pascal是一种类型定义严格的语言,你不能将某个类型的值赋予不同类型的变量,例如将一个整型值赋予布尔型变量,将会导致出错。但是,这个规则在涉及到OOP领域时,出现了一个重要的例外,那就是:可以将一个子类的值赋予一个父类类型的变量。但倒过来却是不行的,一个父类的值决不能赋予一个子类类型的变量。

作者:左轻侯    责编:豆豆技术应用

正在加载评论...