Java >> Java tutorial >  >> Java

Java – Constructor in Interface, et vanskeligt spørgsmål efter Java 8-udgivelse

I denne artikel vil vi diskutere, om definerende konstruktør i Java Interface er gyldige eller ej, dvs.; om kompilering lykkes eller ej

Men for at diskutere konstruktør i Java Interface , skal vi opdele det i 2 dele at forstå i detaljer

  • Konstruktør i Java Grænseflade indtil Java 7
  • Java grænseflade indlæg Java 8 frigive

Her vil vi i denne artikel kort diskutere definition af konstruktører i Interface til Java 7-versioner, dvs. Java 5 eller Java 6 eller Java 7 (forudsat at tidligere versioner ikke bruges i disse dage)

Senere, i den kommende artikel vil vi individuelt diskutere konstruktør i Interface for Java 8-versionen for at forstå, hvorfor Java 8 tilføjede ny funktion med eksempel

1. Konstruktør i Java Interface til Java 1.7 version:

  • Det er ikke tilladt at definere konstruktør i Java Interface;
  • om det er standardkonstruktør eller parametriseret konstruktør

Q) Hvad sker der, hvis vi definerer konstruktør inde i Java Interface?

  • Kompileringstidsfejl opstår af compiler som vist i nedenstående skærmbillede
  • Fejl ved kompilering: Grænseflader kan ikke have konstruktører

Sp) Men hvorfor tillader Java ikke at definere konstruktør i grænsefladen?

Før vi diskuterer, hvorfor Java ikke understøtter konstruktør i Interface, vil vi se hovedpunkterne om Java Interface igennem

Nøglepunkter om Java-grænseflade ,

  • Som standard er variabler defineret i Java Interface "public static final ” –> betyder konstanter (implicit offentlig/statisk/endelig)
  • Disse variabler skal initialiseres og kan ikke ændres, da disse er markeret med "final ” søgeord
  • Hvis det ikke er initialiseret, vil der blive opstået en kompileringsfejl
  • Som standard er metoderne "offentlig abstrakt ” selvom vi ikke eksplicit markerer med abstrakt søgeord
  • Med abstrakt metode betyder, at den ikke har metodetekst (dvs. ingen konkret implementering af metoder)
  • Disse abstrakte grænseflademetoder implementeres ved at nedarve klasser, der giver definition til dem
  • Statiske metoder er ikke tilladt
  • Hvis vi forsøger at tilføje statiske søgeord til abstrakte metoder, kaster compiler fejl
  • Selv ved grænsefladedeklaration er kun offentlige og abstrakte modifikatorer tilladt

Java Interface er mere en kontrakteksponerende aftale, hvorved vi opnår et af kernekoncepterne i OOPS, dvs.; abstraktion

2. Abstraktion:

  • udviser kun relevante detaljer for verden og
  • skjuler vigtige implementeringsdetaljer

Q) Tilbage igen for at diskutere vores primære spørgsmål, hvorfor Java ikke tillader at definere konstruktør inde i grænsefladen?

Generelt vil vi oprette en ny forekomst af klassen

  • At holde specifikke instansværdier ved hjælp af medlemsvariabler (dvs. et objekts tilstand)
  • For at få adgang til medlemsmetoder ved hjælp af dette nyoprettede objekt

Men i Java Interface ,

  • Alle variabler er statiske og tilhører derfor klassen, så det nytter ikke noget at have specifikke instansværdier
  • Udover dette bruges objekter til at påkalde medlemsmetoder, men metoderne her er abstrakte, og implementeringen er givet ved at implementere/arve/udvide klasser
  • Så der er ingen grund til at påberåbe sig disse abstrakte metoder

Årsager:

  • Som vi ved, kommer constructor kun i billedet på tidspunktet for oprettelse af nye objekter
  • Da der ikke er behov for at oprette objekter, og derfor er konstruktør ikke påkrævet i Java Interface
  • Bemærk: Interface bruges som referencevariabeltype i arv

3. Kompileringsfejl med Java-grænseflade:

Sp) Hvad sker der, når vi ikke initialiserer nogen værdier til variabler i Java Interface?

  • Kompileringstidsfejl vil blive smidt
  • Fejl ved kompilering: Det tomme sidste felt strParameter er muligvis ikke initialiseret

Sp) Hvad sker der, når vi tilføjer statiske nøgleord til metoder, der er erklæret i Java Interface?

  • Kompileringstidsfejl vil blive smidt
  • Fejl ved kompilering: Ulovlig modifikator for visning af grænseflademetoden; kun offentlig og abstrakt er tilladt

Konklusion:

  • Vi har set, konstruktører er ikke tilladt i Interface indtil Java 7 version
  • Men med introduktionen af ​​Java 8 tilføjes nogle nye funktioner
  • Og en sådan funktion er "standardmetode ” og “statisk metode " i Java Interface

I den næste artikel vil vi se, hvad der er standard- og statiske metoder i Interface og vil rydde ud af forvirringen med hensyn til at definere konstruktør inde i Interface


Java tag