【问题标题】:Powershell override of the parent class constructorPowershell重写父类构造函数
【发布时间】:2017-11-19 19:54:06
【问题描述】:

完全覆盖父构造函数的语法是什么?

在下面的代码中,我创建了一个 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

【问题讨论】:

    标签: powershell oop inheritance constructor


    【解决方案1】:

    您可以在构造函数中使用方法并将该方法覆盖到派生类中。像这样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 2015-12-03
      • 2012-03-06
      相关资源
      最近更新 更多