Rozdíl mezi abstraktní třídou a rozhraním v Java

Klíčový rozdíl mezi abstraktní třídou a rozhraním v Java

  • V rozhraní může třída implementovat více rozhraní, zatímco třída může zdědit pouze jednu abstraktní třídu.
  • V rozhraní nemá modifikátory přístupu. Předpokládá se, že vše definované uvnitř rozhraní má veřejný modifikátor, zatímco abstraktní třída může mít modifikátor přístupu.
  • Rozhraní nemůže obsahovat datová pole, zatímco abstraktní třída může mít datová pole.
  • Rozhraní pomáhají definovat periferní schopnosti třídy, zatímco abstraktní třída definuje identitu třídy.

Rozhraní vs abstraktní třída v Java

Co je abstraktní třída?

Třída, která má ve své deklaraci klíčové slovo abstract, se nazývá abstraktní třída. Abstraktní třídy by měly mít nula nebo více abstraktních metod. tj. metody bez těla. Může mít více konkrétních metod. Abstraktní třídy umožňují vytvářet plány pro konkrétní třídy. Ale dědící třída by měla implementovat abstraktní metodu. Abstraktní třídy nelze konkretizovat.

Důležité důvody pro používání rozhraní

  • K dosažení se používají rozhraní abstrakce.
  • Navrženo pro podporu dynamického rozlišení metod za běhu
  • Pomáhá vám dosáhnout volného spojení.
  • Umožňuje oddělit definici metody od hierarchie dědičnosti

Důležité důvody pro použití abstraktní třídy

  • Abstraktní třídy nabízejí výchozí funkce pro podtřídy.
  • Poskytuje šablonu pro budoucí specifické třídy
  • Pomůže vám definovat společné rozhraní pro jeho podtřídy
  • Abstraktní třída umožňuje opětovné použití kódu.

Co je to rozhraní?

Rozhraní je plán, který lze použít k implementaci třídy. Rozhraní neobsahuje žádné konkrétní metody (metody, které mají kód). Všechny metody rozhraní jsou abstraktní metody. Rozhraní nelze vytvořit. Třídy, které implementují rozhraní, však mohou být konkretizovány. Rozhraní nikdy neobsahují proměnné instance, ale mohou obsahovat veřejné statické konečné proměnné (tj. konstantní proměnné třídy)

Rozdíl mezi rozhraním a abstraktní třídou v Java

Abstraktní třída vám umožňuje vytvářet funkce, které mohou podtřídy implementovat nebo přepsat, zatímco rozhraní vám umožňuje pouze uvést funkcionalitu, ale ne ji implementovat. Třída může rozšířit pouze jednu abstraktní třídu, zatímco třída může implementovat více rozhraní.

parametry Rozhraní Abstraktní třída
Rychlost Pomalu rychlý
Vícenásobná dědictví Implementujte několik rozhraní Pouze jedna abstraktní třída
Struktura Abstraktní metody Abstraktní a konkrétní metody
Kdy použít Budoucí vylepšení Aby nedošlo k nezávislosti
Dědičnost/ Implementace Třída může implementovat více rozhraní Třída může zdědit pouze jednu abstraktní třídu
Výchozí implementace Při přidávání nových věcí do rozhraní je noční můra najít všechny implementátory a implementovat nově definované věci. V případě abstraktní třídy můžete využít výchozí implementaci.
Modifikátory přístupu Rozhraní nemá modifikátory přístupu. Vše definované uvnitř rozhraní je považováno za veřejný modifikátor. Abstraktní třída může mít modifikátor přístupu.
Kdy použít Je lepší použít rozhraní, když různé implementace sdílejí pouze podpis metody. Polymorfní hierarchie hodnotových typů. Mělo by se používat, když různé implementace stejného druhu sdílejí společné chování.
Datová pole rozhraní nemůže obsahovat datová pole. třída může mít datová pole.
Výchozí vícenásobná dědičnost Třída může implementovat řadu rozhraní. Třída dědí pouze jednu abstraktní třídu.
Implementace Rozhraní je abstraktní, takže nemůže poskytovat žádný kód. Abstraktní třída může poskytnout úplný, výchozí kód, který by měl být přepsán.
Použití modifikátorů Access Pro metodu, vlastnosti atd. nelze použít modifikátory přístupu. Můžete použít abstraktní třídu, která obsahuje modifikátory přístupu.
Používání Rozhraní pomáhají definovat periferní schopnosti třídy. Abstraktní třída definuje identitu třídy.
Definovaná pole Nelze definovat žádná pole Abstraktní třída umožňuje definovat pole i konstanty
Dědictví Rozhraní může zdědit více rozhraní, ale nemůže zdědit třídu. Abstraktní třída může zdědit třídu a více rozhraní.
Konstruktor nebo destruktory Rozhraní nemůže deklarovat konstruktory nebo destruktory. Abstraktní třída může deklarovat konstruktory a destruktory.
Limit rozšíření Může rozšířit libovolný počet rozhraní. Najednou může rozšířit pouze jednu třídu nebo jednu abstraktní třídu.
Abstraktní klíčové slovo V klíčovém slově abstraktního rozhraní je nepovinné pro deklarování metody jako abstraktní. V abstraktní třídě je klíčové slovo abstract povinné pro prohlášení metody za abstraktní.
Typ třídy Rozhraní může mít pouze veřejné abstraktní metody. Abstraktní třída má chráněné a veřejné abstraktní metody.

Ukázkový kód pro rozhraní a abstraktní třídu v Java

Následuje ukázkový kód pro vytvoření rozhraní a abstraktní třídy Java

Syntaxe rozhraní

interface name{
//methods
}

Java Příklad rozhraní:

interface Pet {
    public void test();
}
class Dog implements Pet {
    public void test() {
        System.out.println("Interface Method Implemented");
    }
    public static void main(String args[]) {
        Pet p = new Dog();
        p.test();
    }
}

Syntaxe abstraktní třídy

abstract class name{
    // code
}

Příklad abstraktní třídy:

abstract class Shape {
    int b = 20;
    abstract public void calculateArea();
}

public class Rectangle extends Shape {
    public static void main(String args[]) {
        Rectangle obj = new Rectangle();
        obj.b = 200;
        obj.calculateArea();
    }
    public void calculateArea() {
        System.out.println("Area is " + (b * b));
    }
}

Shrňte tento příspěvek takto: