2017-06-16 10 views
2

親コンストラクタを完全にオーバーライドする構文は何ですか?親クラスのコンストラクタのPowershellのオーバーライド

以下のコードでは、Animalsクラスを継承したAnimalsクラスとDogsクラスを作成します。 Dogsクラスには独自のコンストラクタがありますが、Animalsコンストラクタを置き換える代わりに、AnimalsコンストラクタとDogsコンストラクタの両方を実行してクラスをインスタンス化します。

class Animals { 
    [System.Collections.ArrayList]$animalList = @() 
    Animals() { 
     $this.animalList.add("moose") 
     $this.animalList.add("elephant") 
     $this.animalList.add("buffalo") 
    } 
    showAnimals() { 
     foreach($animal in $this.animalList) { 
      Write-Host $animal 
     } 
    } 
} 
class Dogs : Animals { 
    Dogs() { 
     $this.animalList.add("Doberman") 
     $this.animalList.add("Golden Retriever") 
    } 
} 

$someAnimals = New-Object Animals 
$someDogs = New-Object Dogs 
Write-Host "The animals list:" 
$someAnimals.showAnimals() 
Write-Host "" 
Write-Host "The dogs list:" 
$someDogs.showAnimals() 

これは、次のように生成します。

The animals list: 
moose 
elephant 
buffalo 

The dogs list: 
moose 
elephant 
buffalo 
Doberman 
Golden Retriever 

答えて

2

あなたのコンストラクタにメソッドを使用して、派生クラスにこのメソッドをオーバーライドすることができます。このように:

class Animals { 
    [System.Collections.ArrayList]$animalList = @() 
    Animals() 
    { 
     $this.addAnimals() 
    } 

    [void] addAnimals() 
    { 
     $this.animalList.add("moose") 
     $this.animalList.add("elephant") 
     $this.animalList.add("buffalo") 
    } 

    [void] showAnimals() { 
     foreach($animal in $this.animalList) { 
      Write-Host $animal 
     } 
    } 
} 

class Dogs : Animals { 

    [void] addAnimals() 
    { 
     $this.animalList.add("Doberman") 
     $this.animalList.add("Golden Retriever") 
    } 
} 


Write-Host "" 
Write-Host "" 

$someAnimals = New-Object Animals 
Write-Host "The animals list:" 
$someAnimals.showAnimals() 
Write-Host "" 

$someDogs = New-Object Dogs 
Write-Host "The dogs list:" 
$someDogs.showAnimals() 
関連する問題