Search
V Javě je možné vytvořit takzvanou abstraktní metodu. Jedná se o metodu, u které je definovaná pouze její signatura, ale nikoliv její implementace. Příklad definice abstraktní metody:
public abstract void foo();
Třída, která obsahuje alespoň jednu abstraktní metodu, musí být definována jako abstraktní třída:
public abstract class Abstr { public abstract void foo(); }
Obráceně však tato implikace neplatí, tzn. můžeme vytvořit abstraktní třídu (použitím klíčového slova abstract), která však bude mít všechny své metody implementované.
abstract
Abstraktní třídy se vyznačují tím, že není možné vytvářet jejich instance. Tzn. volání typu
Abstr x = new Abstr();
nebude možné zkompilovat. Nicméně, levá část (tzn. před rovnítkem) je zcela v pořádku a je možné mít proměnné typované na abstraktní třídu. Budeme-li tedy mít nějakého ne-abstraktního potomka (ne-abstraktní = nemá žádnou abstraktní metodu = všechny abstraktní metody má implementované), můžeme vesele vytvářet instance. Příklad:
public class Concr extends Abstr { public void foo() { System.out.println("foo"); } }
Potom již lze udělat následující volání
Abstr x = new Concr(); x.foo();
a správně se zavolá metoda foo na třídě Concrete (klasické přepsání či overriding metody a virtuální volání).
foo
Concrete