abstrakt klass

en abstrakt klass är en klass som förklaras abstrakt — det kan eller får inte innehålla abstrakta metoder. Abstrakta klasser kan inte instansieras, men de kan underklassas. En abstrakt klass kan ha statiska fält och statiska metoder. När en abstrakt klass är underklassad, ger underklassen vanligtvis implementeringar för alla abstrakta metoder i sin moderklass. Men om det inte gör det, måste underklassen också förklaras abstrakt.,

en abstrakt metod är en metod som deklareras utan implementering (utan hängslen och följt av en semikolon), så här:

abstract void sum(int a, int b);

överväg att använda abstrakta klasser om någon av dessa uttalanden gäller för din situation:

  1. du vill dela kod mellan flera närbesläktade klasser.
  2. du förväntar dig att klasser som utökar din abstrakta klass har många vanliga metoder eller fält eller kräver andra åtkomstmodifierare än offentliga (t.ex. skyddade och privata).
  3. du vill deklarera icke-statiska eller icke-slutliga fält., Detta gör att du kan definiera metoder som kan komma åt och ändra tillståndet för objektet som de tillhör.

gränssnitt

ett gränssnitt är bara deklarationen av metoder för ett objekt; det är inte implementeringen. I ett gränssnitt definierar vi vilken typ av operation ett objekt kan utföra. Dessa operationer definieras av de klasser som implementerar gränssnittet. Gränssnitt bildar ett kontrakt mellan klassen och omvärlden, och detta kontrakt verkställs vid byggtiden av kompilatorn.,

överväga att använda gränssnitt om någon av dessa uttalanden gäller för din situation:

  1. du förväntar dig att orelaterade klasser skulle implementera ditt gränssnitt. Gränssnitten jämförbara och Cloneable implementeras till exempel av många orelaterade klasser.
  2. du vill ange beteendet för en viss datatyp, men inte bekymrad över vem som implementerar sitt beteende.
  3. du vill utnyttja flera arv.,

ursprungligen publicerad juni 2016

Ytterligare läsning

  • när (inte) för att använda Java abstrakta klasser
  • Java: gränssnitt Vs. abstrakt klass
  • hur man väljer mellan gränssnitt och abstrakta klasser i Java