detta är kanske den mest ställda frågan i intervjuer relaterade till mjukvaruutveckling eller kvalitetssäkring av programvara. Jag har sett av min erfarenhet att många av oss ofta blir förvirrade eller glömmer definitionen och användningen av abstrakta klasser och gränssnitt. Så, jag vill göra det enklaste så att ingen har några problem med det någonsin igen.
abstrakt klass och gränssnitt är två mycket viktiga svängningar i objektorienterat programmeringskoncept.,
först kommer jag att förklara abstrakt klass och det är användning, och senare kommer vi att flytta in i gränssnitt.
abstrakt klass är inget speciellt att titta på när du vill skilja med en vanlig klass. Men det har fått några metoder som inte är implementerade, eller bara deklarerade, inte definierade. I så fall döps alla dessa metoder och klassen själv med ”abstrakt” nyckelordet.
en abstrakt klass kan ha ett eller flera antal icke-implementerade metoder.,
eftersom en abstrakt klass inte är korrekt, eller inte har idealiskt definierade metoder jämfört med en vanlig klass, så abstrakta klasser kan inte instansieras, det betyder att vi inte kan skapa några direkta objekt av abstrakta klasser.
de klasser som ärver/utökar denna abstrakta klass måste implementera / definiera alla abstrakta metoder i den överordnade abstrakta klassen.
om någon klass inte definierar någon av de abstrakta metoderna blir den klassen också en abstrakt klass.,
användning (en imaginär fallstudie):
låt oss anta att du 1995 har utformat en bilklass som hade en extra funktion-den kan flyga. Du utformade bilklassen väldigt snyggt, alla dina metoder var mycket standard och effektiva, men då visste du att det var ganska omöjligt att genomföra carFlying () – metoden. Så du höll bara carFlying () – metoden tom, eller ogenomförd (nu vet du att det är en abstrakt metod såväl som klass!).,
idag vill jag implementera den flygande bilen som du redan har utformat och tekniken är inte längre omöjlig. Bilen jag ska bygga har alla funktioner som liknar din bil, och dessutom kan den flyga. Så, vad kan jag göra är att jag bara kan ärva (”förlänger” – för Java) din abstrakta klass och måste definiera/implementera den carflying() abstrakta metoden. varsågod! vår flygande bil är redo att rulla.
så, när vi har några vanliga funktioner eller beteende bland olika objekt, kan vi göra en allmän abstrakt klass med den funktionen som en metod implementerad., Men dessa objekt kan ha olika beteenden, i så fall kommer vi att förklara en abstrakt metod och kommer att genomföra dessa abstrakta metoder annorlunda enligt objektets behov.
exempel på abstrakt klass:
än en gång, låt oss överväga ett exempel, en massa brottare får samma summa pengar per timme för att spela. men de har olika tema musik och efterbehandling kampen strategi. Så vi kan hålla betalningsmetoden densamma för alla och få den implementerad i en klass som heter Wrestler., låt oss förklara themeMusic() och finisher () metoderna som abstrakta eftersom dessa två måste implementeras annorlunda för olika objekt i vissa andra klasser som ärver vår brottare abstrakt klass.
och huvud.java:
gränssnitt:
om du har gått igenom den övre delen av denna handledning på rätt sätt, förståelse gränssnitt kommer att bli mycket lättare för dig.
gränssnittet är inte en klass, dess bara gränssnitt. Det har fått några metoder utan kropp inuti det, bara metoden signatur (de är i grunden abstrakta metoder!,), och kan ha några slutliga och statiska variabler. Och en typisk klass ”implementerar” gränssnitt, inte ”sträcker sig”.
flera gränssnitt kan implementeras (i allmänhet ärvt) åt gången.
de klasser som ärver / implementerar gränssnitten måste definiera alla abstrakta metoder för gränssnittet.
metoder inuti gränssnitt är som standard offentliga, ogiltiga och abstrakta.
gränssnittet är typ av flera arv i Java programmeringsspråk.
Vi kan inte instansiera gränssnitt också precis som abstrakta klasser., Eftersom de är ofullständig enhet, och bör inte tillåtas att realiseras. Men ibland kan en aktivitet som instantiating vara tillämplig för den med hjälp av den anonyma innerklassen. Det är inte vår dagordning.
användning av gränssnitt:
gränssnitt sparar kodningstid. Det kan innehålla några statiska och slutliga variabler som kan nås globalt. och några metoder som är abstrakta och lättillgängliga för vidare användning när som helst till den som implementerar gränssnittet.,
exempel på gränssnitt:
i ovanstående exempel på abstrakt klass såg vi att en metod var densamma för alla som hade en kropp inuti den abstrakta klassen och andra metoder var abstrakta. men för gränssnitt är alla metoder nu bara signatur. Klassen StoneCold implementerar brottare gränssnitt och definiera alla tre abstrakta metoder för det enligt dess behov.
den här gången får olika brottare olika pengar per timme. Så det är det mest praktiska att sätta samma metod som abstrakt och definiera den någon annanstans enligt objektets behov.,
public interface Wrestler {
public abstract void paymentForWork (int hours);
public abstract void themeMusic();
public abstract void finisher();
}
och följande klass implementerar Brottargränssnittet.
för huvud.java:
för objekt som initierar vid abstrakt klass eller gränssnitt, kan du hålla följande i åtanke,
A obj= new B();
//where A is an interface/abstract class. B is the concrete(implements/extends "A”)class which gives it’s memory to A’s obj to have access into B class and utilize its defined methods.