public class FireEngine extends Car {
public FireEngine() {
super("消防車");
}
public void work() { //(2)
System.out.println("火事を消す。");
}
}
Ambulance.java
public class Ambulance extends Car {
public Ambulance() {
super("救急車");
}
public void siren() { //(3)
System.out.println("ピーポーピーポー");
}
}
FireAmbulance.java
public class FireAmbulance extends Ambulance {
private FireEnginefir = new FireEngine(); //(1)
public void work() { //(2)
fir.work();
}
}
それでは、この FireAmbulance クラスのインスタンスを生成し、siren と run メソッドを呼び出すクラスも作成してみましょう。
Main.java
public class Main {
public static void main(String[] args) {
FireAmbulancefam = new FireAmbulance(); //(1)
fam.work(); //(2)
fam.siren(); //(3)
fam.run(); //(4)
}
}
public class FireEngine : Car
{
public FireEngine() : base("消防車") { }
public override void Work() { //(2)
Console.WriteLine("火事を消す。");
}
}
Ambulance.cs
public class Ambulance : Car
{
public Ambulance() : base("救急車") {}
public void Siren() { //(3)
Console.WriteLine("ピーポーピーポー");
}
}
FireAmbulance.cs
public class FireAmbulance : Ambulance
{
private FireEnginefir = new FireEngine(); //(1)
public override string Work() //(2)
{
return fir.Work();
}
}
Ambulance クラスは、新たに siren というメソッドを持っています。それでは、この Ambulance クラスのインスタンスを生成し、siren と run メソッドを呼び出すクラスも作成してみましょう。
main.cs
public class Example
{
public static void main(String[] args) {
FireAmbulancefam = new FireAmbulance(); //(1)
fam.Work(); //(2)
fam.Siren(); //(3)
fam.Run(); //(4)
}
}
Public Class FireEngine
Inherits Car
Public Sub New()
MyBase.New("消防車")
End Sub
Public Overrides Function Work() As String ' (2)
Return "火事を消す。"
End Function
End Class
Ambulance.vb
Public Class Ambulance
Inherits Car
Public Ambulance()
MyBase.New("救急車")
End Sub
Public Sub Siren() ' (3)
Console.WriteLine("ピーポーピーポー")
End Sub
End Class
FireAmbulance.vb
Public Class FireAmbulance
Inherits Ambulance Private fir As FireEngine = New FireEngine() ' (1)
Public Overrides Function Work() As String ' (2)
Return fir.Work()
End Function
End Class
Ambulance クラスは、新たに Siren というメソッドを持っています。それでは、この Ambulance クラスのインスタンスを生成し、Siren と Run メソッドを呼び出すクラスも作成してみましょう。
main.vb
Module Module1
Sub Main()
Dim fam As FireAmbulance = New FireAmbulance() ' (1)
fam.Work(); ' (2)
fam.Siren(); ' (3)
fam.Run(); ' (4)
End Sub
End Class
package FireEngine {
use base qw(Car);
sub new() {
my ($class) = @_;
my $this = $class->SUPER::new("消防車");
return bless $this, $class;
}
work() { #(2)
print "火事を消す。\n";
}
}
1;
Ambulance.pm
package Ambulance {
use base qw(Car);
sub new() {
my ($class) = @_;
my $this = $class->SUPER::new("救急車");
return bless $this, $class;
}
sub siren() { #(3)
print "ピーポーピーポー\n";
}
}
1;
FireAmbulance.pm
package FireAmbulance {
use base qw(Ambulance);
use FireEngine;
sub new() {
my ($class) = @_;
my $this = $class->SUPER::new();
$this->{fir} = new FireEngine(); #(1)
return bless $this, $class;
}
sub work() { #(2)
$this->{fir}->work();
}
}
1;
それでは、この FireAmbulance クラスのインスタンスを生成し、siren と run メソッドを呼び出してみましょう。
main.pl
my $fam = new FireAmbulance(); #(1)
$fam->work(); #(2)
$fam->siren(); #(3)
$fam->run(); #(4)
<?php
require_once('Car.php');
class FireEngine extends Car {
public function __construct() {
parent::__construct("消防車");
}
public function work() { //(2)
print "火事を消す。\n";
}
}
?>
Ambulance.php
<?php
require_once('Car.php');
class Ambulance extends Car {
public function __construct() {
parent::__construct("救急車");
}
public function siren() { //(3)
print "ピーポーピーポー\n";
}
}
?>
FireAmbulance.php
<?php
require('Ambulance.php');
require('FireEngine.php');
public class FireAmbulance extends Ambulance {
public function __construct() {
parent::__construct();
$this->fir = new FireEngine(); //(1)
}
public function work() { //(2)
$this->fir->work();
}
}
?>
それでは、この FireAmbulance クラスのインスタンスを生成し、siren と run メソッドを呼び出すクラスも作成してみましょう。
import {Car} from "./Car";
export
class FireEngine extends Car {
public constructor() {
super("消防車");
}
public work():void { //(2)
process.stdout.write("火事を消す。\n");
}
}
Ambulance.ts
import {Car} from "./Car";
export
class Ambulance extends Car {
public constructor() {
super("救急車");
}
public siren():void { //(3)
process.stdout.write("ピーポーピーポー\n");
}
}
FireAmbulance.ts
import {Ambulance} from "./Ambulance";
import {FireEngine} from "./FireEngine";
export
class FireAmbulance extends Ambulance {
private fir:FireEngine = new FireEngine(); //(1)
public work():void { //(2)
fir.work();
}
}
それでは、この FireAmbulance クラスのインスタンスを生成し、siren と run メソッドを呼び出すクラスも作成してみましょう。
Example.ts
import {FireAmbulance} from "./FireAmbulance";
let fam:FireAmbulance = new FireAmbulance(); //(1)
fam.work(); //(2)
fam.siren(); //(3)
fam.run(); //(4)
package BullAmbulance {
use base qw(Ambulance);
use Bulldozer;
sub new {
my ($class) = @_;
my $this = $class->SUPER::new();
$this->{bul} = new Bulldozer();
return bless $this, $class;
}
sub work {
my ($this) = @_;
$this->{bul}->work();
}
}
BullAmbulance.rb
class BullAmbulance < Ambulance
def initialize()
super()
@bul = Bulldozer.new
end
def work()
@bul.work()
end
end
<?php
require('Ambulance.php');
require('Bulldozer.php');
class BullAmbulance extends Ambulance {
public function __construct() {
parent::__construct();
$this->bul = new Bulldozer();
}
public function work() {
echo $this->bul->work();
}
}
?>
BullAmbulance.ts
import {Ambulance} from "./Ambulance";
import {Bulldozer} from "./Bulldozer";
export
class BullAmbulance extends Ambulance {
private bul:Bulldozer = new Bulldozer();
public work:void() {
this.bul.work();
}
}
BullAmbulance.swift
class BullAmbulance : Ambulance {
private var bul:Bulldozer = Bulldozer()
public override func work() {
bul.work()
}
}
BullAmbulance.kt
class BullAmbulance : Ambulance() {
private val bul:Bulldozer = Bulldozer()
override fun work() {
bul.work()
}
}
BullAmbulance.kt
class BullAmbulance extends Ambulance() {
private val bul:Bulldozer = Bulldozer()
override def work() {
bul.work()
}
}
BullAmbulance.groovy
class BullAmbulance extends Ambulance {
Bulldozerbul = new Bulldozer()
void work() {
bul.work()
}
}
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
public class Car {
protected String kind = "自動車";
public Car() { }
public Car(String kind) {
this.kind = kind;
}
public void run() {
System.out.println(kind + "が走る。");
}
public void work() {
System.out.println("");
}
}
FireEngine.java
public class FireEngine extends Car {
public FireEngine() {
super("消防車");
}
public void work() { //(3)
System.out.println("火事を消す。");
}
}
Ambulance.java
public class Ambulance extends Car {
public Ambulance() {
super("救急車");
}
public void siren() { //(4)
System.out.println("ピーポーピーポー");
}
}
SuperAmbulance.java
public class SuperAmbulance extends Ambulance {
private Carcar; public SuperAmbulance(Carcar) {
this.car = car; //(2)
} public void work() { //(3)
car.work();
}
}
Main.java
public class Main {
public static void main(String[] args) {
SuperAmbulancesam = new SuperAmbulance(new FireEngine()); //(1)
sam.work(); //(3)
sam.siren(); //(4)
sam.run(); //(5)
}
}
〈宣言/定義〉
Ambulance を基底クラスに持つ派生クラス SuperAmbulance を宣言します。
生成されたオブジェクトを保持する Car 型の変数を定義します。
work メソッドを定義し、与えられたオブジェクトの work を呼ぶようにします。
〈処理の流れ〉
派生クラス SuperAmbulance 型の変数 sam を宣言、FireEngine のインスタンスを引数に SuperAmbulance のインスタンスを生成します。
SuperAmbulance のオブジェクト生成時、コンストラクタがが呼ばれ、FireEngine のオブジェクトが car に保存されます。
メソッド work を呼び出します。SuperAmbulance の work が実行されます。そして、car 内に保持している FireEngine オブジェクトの work メソッドが呼び出されます。
Car 型のポインター変数には、new 演算子によって生成された動的インスタンスである Car または Car の「派生クラス」のオブジェクトを代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」なら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ Work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの Work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の Work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ Work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの Work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の Work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
Public Class Car
Protected kind As String = "自動車"
Public Sub New()
End Sub
Public Sub New(kind As String)
Me.kind = kind
End Sub
Public Sub Run() ' (5)
Console.WriteLine(kind & "が走る。")
End Sub
Public Overridable Sub Work()
Console.WriteLine("")
End Sub
End Class
FireEngine.vb
Public Class FireEngine
Inherits Car
Public Sub New()
MyBase.New("消防車")
End Sub
Public Overrides Function Work() As String ' (3)
Return "火事を消す。"
End Function
End Class
Ambulance.vb
Public Class Ambulance
Inherits Car
Public Ambulance()
MyBase.New("救急車")
End Sub
Public Sub Siren() ' (4)
Console.WriteLine("ピーポーピーポー")
End Sub
End Class
SuperAmbulance.vb
Public Class SuperAmbulance
Inherits Ambulance Private car As Car Public Sub New(car As Car) ' (2)
Me.car = car
End Sub Public Overrides Function Work() As String ' (3)
Return car.Work()
End Function
End Class
main.vb
Module Module1
Sub Main()
Dim sam As SuperAmbulance = New SuperAmbulance(New FireEngine()) ' (1)
sam.Work() ' (3)
sam.Siren() ' (4)
sam.Run() ' (5)
End Sub
End Module
〈宣言/定義〉
Ambulance を基底クラスに持つ派生クラス SuperAmbulance を宣言します。
生成されたオブジェクトを保持する Car 型の変数を定義します。
Work メソッドを定義し、与えられたオブジェクトの Work を呼ぶようにします。
〈処理の流れ〉
派生クラス SuperAmbulance 型の変数 sam を宣言、FireEngine のオブジェクトを引数に SuperAmbulance のオブジェクトを生成します。
SuperAmbulance のオブジェクト生成時、コンストラクタがが呼ばれ、FireEngine のオブジェクトが car に保存されます。
メソッド Work を呼び出します。SuperAmbulance の Work が実行されます。そして、car 内に保持している FireEngine オブジェクトの Work メソッドが呼び出されます。
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
<?php
class Car {
public function __construct($kind = "自動車") { //(2)
$this->kind = $kind;
} public function run() {
print $this->kind . "が走る。\n";
}
public function work() {
print "\n";
}
}
?>
FireEngine.php
<?php
require_once('Car.php');
class FireEngine extends Car {
public function __construct() {
parent::__construct("消防車");
}
public function work() { //(3)
print "火事を消す。\n";
}
}
?>
Ambulance.php
<?php
require_once('Car.php');
class Ambulance extends Car {
public function __construct() {
parent::__construct("救急車");
}
public function siren() { //(4)
print "ピーポーピーポー";
}
}
?>
SuperAmbulance.php
<?php
require_once('Ambulance.php');
class SuperAmbulance extends Ambulance {
public function __construct($car) {
$this->car = $car; //(2)
} public function work() { //(3)
$this->car->work();
}
}
?>
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
export
class Car {
protected kind:string = "自動車";
public constructor(kind:string = "自動車") {
this.kind = kind;
}
public run():void {
process.stdout.write(kind + "が走る。\n");
}
public work():void {
process.stdout.write("\n");
}
}
FireEngine.ts
import {Car} from "./Car";
export
class FireEngine extends Car {
public constructor() {
super("消防車");
}
public work():void { //(3)
process.stdout.write("火事を消す。\n");
}
}
Ambulance.ts
import {Car} from "./Car";
export
class Ambulance extends Car {
public constructor() {
super("救急車");
}
public siren():void { //(4)
process.stdout.write("ピーポーピーポー\n");
}
}
SuperAmbulance.ts
import {Ambulance} from "./Ambulance";
import {Car} from "./Car";
export
class SuperAmbulance extends Ambulance {
private car:Car; public constructor(car:Car) {
super();
this.car = car; //(2)
} public work():void { //(3)
this.car.work();
}
}
Example.ts
import {FireEngine} from "./FireEngine";
import {SuperAmbulance} from "./SuperAmbulance";
let sam:SuperAmbulance = new SuperAmbulance(new FireEngine()); //(1)
sam.work(); //(3)
sam.siren(); //(4)
sam.run(); //(5)
〈宣言/定義〉
Ambulance を基底クラスに持つ派生クラス SuperAmbulance を宣言します。
生成されたオブジェクトを保持する Car 型の変数を定義します。
work メソッドを定義し、与えられたオブジェクトの work を呼ぶようにします。
〈処理の流れ〉
派生クラス SuperAmbulance 型の変数 sam を宣言、FireEngine のインスタンスを引数に SuperAmbulance のインスタンスを生成します。
SuperAmbulance のオブジェクト生成時、コンストラクタがが呼ばれ、FireEngine のオブジェクトが car に保存されます。
メソッド work を呼び出します。SuperAmbulance の work が実行されます。そして、car 内に保持している FireEngine オブジェクトの work メソッドが呼び出されます。
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
class Car {
internal var kind:string = "自動車"
public init(kind:String = "自動車") {
self.kind = kind
}
public func run() {
print("\(kind)が走る。")
}
public func work() {
print()
}
}
FireEngine.swift
class FireEngine : Car {
public init() {
super.init("消防車")
}
public override func work() { //(3)
print("火事を消す。")
}
}
Ambulance.swift
class Ambulance : Car {
public init() {
super.init("救急車")
}
public func siren() { //(4)
print("ピーポーピーポー")
}
}
SuperAmbulance.swift
class SuperAmbulance : Ambulance {
internal var car:Car public init(car:Car) {
super.init()
self.car = car //(2)
} public override func work() { //(3)
car.work()
}
}
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
SuperAmbulance では、ICar インタフェース型の変数 car に、「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ Work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの Work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の Work メソッドです。
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
Car 型の変数には、Car オブジェクトか、Car の「派生クラス」のオブジェクトなら代入できます。SuperAmbulance では、Car 型の変数 car に、その「派生クラス」の FireEngine オブジェクトを代入しています。
こうすることによって、Car の「派生クラス」のオブジェクトなら同じように処理できるわけです。ここでは、Car クラスの持つ work メソッドを呼び出しています。しかし、これによって呼び出されるメソッドは、Car クラスの work メソッドではありません。変数 car に代入されているオブジェクトのクラスである FireEngine の work メソッドです。
ただし、こうした呼び出しで使用できるメソッドは、あくまで Car クラスに存在するものだけです。FireEngine クラスに独自に追加されたメソッドは呼び出すことができません。
unit UnitCar;
interface
type
Car = class(TInterfacedObject)
protected
var kind:string;
public
constructor Create(); overload;
constructor Create(kind:string); overload;
procedure run();
procedure work(); virtual;
end;
implementation
constructor Car.Create(); //(2)
begin
kind := '自動車';
end;
constructor Car.Create(kind:string)
begin
self.kind = kind;
end;
procedure Car.run();
begin
Writeln(kind + 'が走る。');
end;
procedure Car.work();
begin
Writeln('');
end;
end.
FireEngine.pas
unit UnitFireEngine;
interface
uses
UnitCar;
type
FireEngine = class(Car)
public
constructor Create();
procedure work(); override;
end;
implementation
constructor FireEngine.Create();
begin
inherited Create('消防車');
end;
procedure FireEngine.work(); //(3)
begin
Writeln('火事を消す。');
end;
end.
Ambulance.pas
unit UnitAmbulance;
interface
uses
UnitCar;
type
Ambulance = class(Car)
public
constructor Create();
procedure siren();
end;
implementation
constructor Ambulance.Create();
begin
inherited Create('救急車');
end;
procedure Ambulance.siren(); //(4)
begin
Writeln('ピーポーピーポー');
end;
end.
SuperAmbulance.pas
unit UnitSuperAmbulance;
interface
uses
UnitCar,
UnitAmbulance;
type
SuperAmbulance = class(Ambulance);
public
constructor Create(car: Car);
procedure work(); override;
end;
implementation
var _car: Car; constructor SuperAmbulance.Create(car:Car);
begin
_car := car; //(2)
inherited Create();
end; procedure SuperAmbulance.work(); //(3)
begin
_car.work();
end;
end.
Main.dpr
program Main;
uses
UnitSuperAmbulance,
UnitFireEngine;
var sam:SuperAmbulance;
var fir:FireEngine;
begin
fir := FireEngine.Create();
sam := SuperAmbulance.Create(fir); //(1)
sam.work(); //(3)
sam.siren(); //(4)
sam.run(); //(5)
sam.Free;
fir.Free;
end.
〈宣言/定義〉
Ambulance を基底クラスに持つ派生クラス SuperAmbulance を宣言します。
生成されたオブジェクトを保持する Car 型の変数を定義します。
work メソッドを定義し、与えられたオブジェクトの work を呼ぶようにします。
〈処理の流れ〉
派生クラス SuperAmbulance 型の変数 sam を宣言、FireEngine のインスタンスを引数に SuperAmbulance のインスタンスを生成します。