2017-06-16 109 views
2

完全覆蓋父構造函數的語法是什麼?父類構造函數的Powershell覆蓋

在下面的代碼中,我創建了一個Animals類和一個繼承自Animals類的Dog類。 Dogs類有它自己的構造函數,但不是替換Animals構造函數,而是在實例化類時運行Animals構造函數和Dog構造函數。

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()