© 2004 Microsoft Corporation. All rights reserved.

Figure 1 Inheritable Class
  Class Class1
  Overridable Sub Foo()
    '*** method definition
  End Sub 
End Class
'*** your class
Class Class2 : Inherits Class1
  Overrides Sub Foo()
    '*** method definition
  End Sub 
End Class
'*** another programmer's class
Class Class3 : Inherits Class2
  '*** can this class override Foo?
End Class

Figure 2 Using NotOverridable
  Class Class1
  Overridable Sub Foo()
    '*** method definition
  End Sub 
End Class
'*** your class
Class Class2 : Inherits Class1
  NotOverridable Overrides Sub Foo()
    '*** method definition
  End Sub 
End Class
'*** another programmer's class
Class Class3 : Inherits Class2
  '*** this class cannot override Foo
End Class

Figure 3 One Foo, Many Calling Methods
  Class Class1
  Overridable Sub Foo()
    '*** method definition
  End Sub
End Class
Class Class2 : Inherits Class1
  Overrides Sub Foo()
    '*** method definition
  End Sub
  Sub Bar()
    MyBase.Foo()  '*** uses static binding to call Class1.Foo
    MyClass.Foo() '*** uses static binding to call Class2.Foo
    Me.Foo()      '*** uses dynamic binding to call Class3.Foo
    Foo()         '*** uses dynamic binding to call Class3.Foo
  End Sub
End Class
Class Class3 : Inherits Class2
  Overrides Sub Foo()
    '*** method definition
  End Sub
End Class

Figure 4 Deriving from Class1
  Interface IFooable
  Sub Foo()
End Interface
Class Class1 : Implements IFooable
  Sub Foo() Implements IFooable.Foo
    '*** method definition
  End Sub 
End Class
'*** Class2 implicitly implements IFooable
Class Class2 : Inherits Class1
  '*** can this class override IFooable.Foo?
End Class

Figure 5 Foo Declared as Overridable
  Interface IFooable
  Sub Foo()
End Interface
Class Class1 : Implements IFooable
  Overridable Sub Foo() Implements IFooable.Foo
    '*** method definition
  End Sub 
End Class
Class Class2 : Inherits Class1
  Overrides Sub Foo()
    '*** method definition
  End Sub 
End Class

Figure 6 Foo Declared as Protected
  Interface IFooable
  Sub Foo()
End Interface
Class Class1 : Implements IFooable
  Protected Overridable Sub Foo() Implements IFooable.Foo
    '*** method definition
  End Sub 
End Class
Class Class2 : Inherits Class1
  Protected Overrides Sub Foo()
    '*** method definition
  End Sub 
End Class

Figure 7 Concrete Class Inherits from Abstract Class
  MustInherit Class Person
  MustOverride Sub Speak()
  '*** other definition details omitted for clarity
End Class
Class Programmer : Inherits Person
  Overrides Sub Speak()
    '*** programmer-specific implementation
  End Sub
End Class
Class Administrator : Inherits Person
   '*** does not compile - no implementation for Speak
End Class