Rozhraní vs abstraktní třída v Javě: Jaký je rozdíl?

Obsah:

Anonim

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.

Nelze vytvořit instanci rozhraní. Lze však vytvořit instanci tříd, které implementují rozhraní. Rozhraní nikdy neobsahují proměnné instance, ale mohou obsahovat veřejné statické konečné proměnné (tj. Proměnné konstantní třídy)

Co je abstraktní třída?

Třída, která má ve své deklaraci abstraktní klíčové slovo, se nazývá abstraktní třída. Abstraktní třídy by měly mít alespoň jednu abstraktní metodu. tj. metody bez těla. Může mít několik konkrétních metod.

Abstraktní třídy umožňují vytvářet plány pro konkrétní třídy. Dědicí třída by ale měla implementovat abstraktní metodu.

Abstraktní třídy nelze vytvořit instanci.

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

  • K dosažení abstrakce se používají rozhraní.
  • Navrženo pro podporu dynamického rozlišení metody za běhu
  • Pomůže 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í konkrétní 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.

Rozhraní vs. Abstraktní třída

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 stavovat funkce, ale ne 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 Pomalý Rychle
Více dědičností Implementujte několik rozhraní Pouze jedna abstraktní třída
Struktura Abstraktní metody Abstrakt a konkrétní metody
Kdy použít Budoucí vylepšení Vyhnout se 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ůrou najít všechny implementátory a implementovat nově definované věci. V případě Abstract Class můžete využít výhody výchozí implementace.
Modifikátory přístupu Rozhraní nemá modifikátory přístupu. Všechno definované uvnitř rozhraní se předpokládá jako 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 typů hodnot. Mělo by se použít, 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í nastavení více 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 poskytnout žá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ů přístupu Pro metodu, vlastnosti atd. Nemůžete 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í. Může rozšířit pouze jednu třídu nebo jednu abstraktní třídu najednou.
Abstraktní klíčové slovo V abstraktním klíčovém slově rozhraní je volitelné pro deklaraci metody jako abstraktu. V abstraktní třídě je klíčové slovo abstract povinné pro deklaraci metody jako abstraktu.
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 Javě

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

Syntaxe rozhraní

interface name{//methods}

Příklad rozhraní Java:

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 " + (obj.b * obj.b));}}