package com.ack.learning;
public class SimpleInheritance /* implicitly inherits from Object class */ {
// available to subclass and package level clients
protected int balance;
public SimpleInheritance( String str ) {
System.out.println( "SimpleInheritance says: " + str );
}
public void message() {
}
}
class MySubclass extends SimpleInheritance {
// must define constructor because parent class
// does not define a default constructor
public MySubclass( String str ) {
// call the parent class's constructor
super( str );
}
// i've overriden the message method declared within SimpleInheritance
public void message() {
// but can call it by using the super keyword
super.message();
// i can also access non-private implementation, best not to have any
// in the first place, and expose through controlled accessor methods
System.out.println( super.balance );
}
}
class PackageLevelClient {
public PackageLevelClient() {
SimpleInheritance is = new MySubclass( "yo" );
// nasty, as a class in the package i can access
// all protected variables defined within this package,
// even though i'm not a part of the inheritance tree
// yuk, yuk, yuk, yuk!!!!!!!!!!
is.balance = 45;
}
}