jtulach@99: package org.apidesign.sidemeanings; jtulach@99: jtulach@324: public abstract class Protected { jtulach@324: int counter; jtulach@324: jtulach@324: Protected() {} jtulach@324: jtulach@324: protected void increment() { jtulach@324: counter++; jtulach@324: } jtulach@324: jtulach@324: public final void incrementTenTimes() { jtulach@324: for (int i = 0; i < 10; i++) { jtulach@324: increment(); jtulach@324: } jtulach@324: } jtulach@324: jtulach@324: public final void assertCounter(int expected) { jtulach@324: assert expected == counter : "Expected " + expected + " but was " + counter; jtulach@324: } jtulach@99: jtulach@99: jtulach@324: public static class Dirty extends Protected { jtulach@99: // BEGIN: sidemeanings.Protected.Dirty jtulach@324: protected void increment() { jtulach@324: // implementation: jtulach@324: counter++; jtulach@99: } jtulach@99: // END: sidemeanings.Protected.Dirty jtulach@99: } jtulach@99: jtulach@99: jtulach@324: public static abstract class Clean extends Protected { jtulach@99: // BEGIN: sidemeanings.Protected.Clean jtulach@324: protected abstract void increment(); jtulach@324: protected final void defaultIncrement() { jtulach@324: counter++; jtulach@99: } jtulach@99: // END: sidemeanings.Protected.Clean jtulach@99: } jtulach@99: }