Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Abstraktní třídy a metody

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é.

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í).

courses/b0b36pjv/tutorials/04/abstract.txt · Last modified: 2021/03/03 11:13 by seredlad