= Access Modifiers = Access Modifiers can be specified on Classes, Class (instance and class) variables and methods to set their visibility and accessibility[[BR]] These are also called 'isNames' in the Cobra doc and Discussion since they're specified with a leading '''is''' keyword. Method Access modifiers '''virtual, public''' is default for methods[[BR]] '''protected''' is default for methods and class/instance variables with '''_''' prefix on name[[BR]] '''private''' is default for methods and class/instance variables with '''_ _''' (double underscore) prefix on name[[BR]] '''public''' is default for variables without any '''_''' prefix Valid 'is' keywords are * '''fake''' - specifies item has no implementation - a placeholder * '''shared''' - Specifies Class (static) method or variable, * '''virtual''', '''nonvirtual''' - on methods, specifies that the method overridable or not * '''override''', '''new''' - on methods specifies that a method is overriding or replacing a baseclass method of same signature * '''public''', '''protected''', '''private''', '''internal''' - specifies item visibility * '''abstract''' - specifies a template only, subclasses must define fully Separate multiple modifiers with ''',''' e.g .... is protected, override == Notes and Examples == is fake:: temporary for defining class/method api without implementation e.g {{{ class TextWriter is fake get newLine as String pass }}} is shared:: on instance variable makes it a class variable. on method makes it a class method (effect is same as static (in C#, Java)) is public/protected/private:: on class, instance variable or method(s) adjust visibility (default public) is abstract:: on class or method(s) Specifies item as a template for subclasses to provide implementation of. is virtual:: method is redefinable (default) is nonvirtual:: method is not redefinable is override:: Specifies that this method implementation is a redefinition of an existing(shadowed virtual or abstract) method defined in a superclass is new:: Designate that this method is a new one that hides the one that would have been inherited from a baseclass. e.g {{{ class Vehicle def drive is nonvirtual pass class Car inherits Vehicle def drive is new pass }}} When a method, property or indexer has the same name and type signature as a base member, you must specify '''is override''' or specify '''is new''' or use '''base.''' in the implementation (which is an implicit '''is override''')