当前位置: 首页 > 知识库问答 >
问题:

VB。Net-继承类的实现

田嘉慕
2023-03-14

例如,我有一个名为Animal的基类。

Public MustInherit Class Animal
    Public Property Name As String

      Public Sub New(animalName As String)
        Name = animalName
      End Sub

    Public Sub Sleep()
        MsgBox("ZZZZZZZZZZZ")
    End Sub

    Public MustOverride Sub MakeSound()

End Class

子类可以实现以下一个或多个接口:

Public Interface IShed
    Sub Shed()
End Interface

Public Interface IBeAJerk
    Sub BeAJerk()
End Interface

我有3个子类:

Public Class Dog
    Inherits Animal
    Implements IShed

    Public Sub New(dogName As String)
        MyBase.New(dogName)
    End Sub

    Public Overrides Sub MakeSound()
        MsgBox("Bark")
    End Sub

    Public Sub WagTail()
        MsgBox("Wag")
    End Sub

    Public Sub DogShed() Implements IShed.Shed
        MsgBox("Dog fur everywhere")
    End Sub

End Class

Public Class Cat
    Inherits Animal
    Implements IShed
    Implements IBeAJerk

    Public Sub New(catName As String)
        MyBase.New(catName)
    End Sub

    Public Overrides Sub MakeSound()
        MsgBox("Meow")
    End Sub

    Public Sub Purr()
        MsgBox("Purr")
    End Sub

    Public Sub CatShed() Implements IShed.Shed
        MsgBox("Cat fur everywhere")
    End Sub

    Public Sub Ignore() Implements IBeAJerk.BeAJerk
        MsgBox("Ignore owner")
    End Sub
End Class

Public Class Snake
    Inherits Animal
    Implements IBeAJerk

    Public Sub New(snakeName As String)
        MyBase.New(snakeName)
    End Sub

    Public Overrides Sub MakeSound()
        MsgBox("SSSSSS")
    End Sub

    Public Sub Slither()
        MsgBox("Slither")
    End Sub

    Public Sub Bite() Implements IBeAJerk.BeAJerk
        MsgBox("Bite owner")
    End Sub
End Class

现在我有了一个方法,我想接受我知道的动物(狗或猫)。有没有一种方法可以在不确定是哪种动物的情况下到达界面?这样做会很好:

Private Sub MakeAMess(sheddingAnimal As Animal.ThatImplementsIShed)
    'I want to be able to access both IShed (Shed method) and
    'Animal (Name property)
    sheddingAnimal.Shed()
    MsgBox(sheddingAnimal.Name & " made a mess!")
End Sub

我不想把IShed接口变成另一个抽象类,因为Cat和Snake都需要实现IBeAJerk接口。但是蛇不会蜕皮。(实际上我猜蛇会蜕皮,但你明白我的意思。)

谢谢你的帮助!

共有1个答案

徐绪
2023-03-14

我建议创建一个新接口I动物,然后让IShed扩展该接口(IBeAJerk也是如此)。类型动物然后将实现I动物。然后该方法将采用类型IShed的参数。

Public Interface IAnimal
  Property Name As String
  Sub New(animalName As String)
  Sub Sleep()
  Sub MakeSound()
End Interface

Public Interface IShed
    Inherits IAnimal
    Sub Shed()
End Interface

Public Interface IBeAJerk
    Inherits IAnimal
    Sub BeAJerk()
End Interface

或者,您可以允许动物作为方法的参数,并在运行时检查传递的实例是否实现了IShed,然后调用Shed

Private Sub MakeAMess(animal As Animal) 
  (TryCast(animal, IShed))?.Shed() 
  ' additional code doing stuff with Animal
End Sub
 类似资料:
  • 本文向大家介绍Python实现类继承实例,包括了Python实现类继承实例的使用技巧和注意事项,需要的朋友参考一下 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,本文就举一例Python类继承的实例。 实例代码如下: 运行结果:

  • 1、定义类的继承 说到继承,你一定会联想到继承你老爸的家产之类的。 类的继承也是一样。 比如有一个旧类,是可以算平均数的。然后这时候有一个新类,也要用到算平均数,那么这时候我们就可以使用继承的方式。新类继承旧类,这样子新类也就有这个功能了。 通常情况下,我们叫旧类为父类,新类为子类。 首先我们来看下类的继承的基本语法: class ClassName(BaseClassName): <st

  • 本文向大家介绍JavaScript中的继承之类继承,包括了JavaScript中的继承之类继承的使用技巧和注意事项,需要的朋友参考一下 继承简介       在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以

  • 类继承是一个类扩展另一个类的一种方式。 因此,我们可以在现有功能之上创建新功能。 “extends” 关键字 假设我们有 class Animal: class Animal { constructor(name) { this.speed = 0; this.name = name; } run(speed) { this.speed = speed;

  • 在面向对象的程序设计中,定义一个新的 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类,而被继承的 class 称为基类、父类或超类。 Python 中继承的语法如下: class Parent: pass class Child(Parent): pass 在第 1 行,定义了父类 Parent; 在第 4 行,定义了子类 Child,语法

  • 我试图弄清楚Java中的继承和数组,并试图让这些类一起工作。我相信我已经继承下来了,但我仍在为数组部分而挣扎。 有三个文件: 1. Person.java-基类2. Student.java-派生的Person.java3. Family.java-不太确定,我认为这是它自己的基类 人java有两个实例变量,String name和int age,以及各种各样的构造函数toString、equal