2017-06-16 229 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()