package MyClass::Baz;

# MyClass::Baz also derives from MyClass::Foo
use MyClass::Foo "isa";

# switch to Bar's "LOCAL" namespace 
package MyClass::Baz::LOCAL;

use strict;
use warnings;

# change initial value for class attribute "cname" declared in Foo  
declare setvalue cname => "Baz";

# call class constructor
class_initialize;

# declare instance attribute
declare attribute bazs => "BAZS";

# declare private attribute
declare _bazs_secret => private attribute;

# declare instance method
declare get_bazs_secret => method {
    my $self = shift;
    return $self->_bazs_secret;
};

my $baz_population = 0;

# declare instance method
declare baz_population => method {
    return $baz_population;
};

declare overwrite init => method {
    my $self = shift;
    $self->base_init( @_ );
    
    $baz_population++;
    
    $self->_bazs_secret = "BAZ:" . (int( rand(1000) )+1000);
};

declare overwrite DESTROY => method {
    my $self = shift;    
    $baz_population--;
    $self->base_destroy;
};

class_verify;