Java abstrakce


Abstraktní třídy a metody

Abstrakce dat je proces skrytí určitých detailů a zobrazení pouze podstatných informací uživateli.
Abstrakce lze dosáhnout buď abstraktními třídami nebo rozhraními (o kterých se více dozvíte v další kapitole).

Klíčové abstractslovo je modifikátor bez přístupu, který se používá pro třídy a metody:

  • Abstraktní třída: je omezená třída, kterou nelze použít k vytváření objektů (pro přístup k ní musí být zděděna z jiné třídy).

  • Abstraktní metoda: lze ji použít pouze v abstraktní třídě a nemá tělo. Tělo poskytuje podtřída (zděděná od).

Abstraktní třída může mít jak abstraktní, tak regulární metody:

abstract class Animal {
  public abstract void animalSound();
  public void sleep() {
    System.out.println("Zzz");
  }
}

Z výše uvedeného příkladu není možné vytvořit objekt třídy Animal:

Animal myObj = new Animal(); // will generate an error

Chcete-li získat přístup k abstraktní třídě, musí být zděděna z jiné třídy. Pojďme převést třídu Animal, kterou jsme použili v kapitole Polymorfismus , na abstraktní třídu:

Pamatujte si z kapitoly Dědičnost , že klíčové slovo používáme extendsk dědění od třídy.

Příklad

// Abstract class
abstract class Animal {
  // Abstract method (does not have a body)
  public abstract void animalSound();
  // Regular method
  public void sleep() {
    System.out.println("Zzz");
  }
}

// Subclass (inherit from Animal)
class Pig extends Animal {
  public void animalSound() {
    // The body of animalSound() is provided here
    System.out.println("The pig says: wee wee");
  }
}

class Main {
  public static void main(String[] args) {
    Pig myPig = new Pig(); // Create a Pig object
    myPig.animalSound();
    myPig.sleep();
  }
}

Proč a kdy používat abstraktní třídy a metody?

Chcete-li dosáhnout bezpečnosti - skryjte určité detaily a zobrazte pouze důležité detaily objektu.

Poznámka: Abstrakce lze dosáhnout také pomocí rozhraní , o kterých se více dozvíte v další kapitole.