JavaRush /Java Blog /Random-TK /Sorag-jogap: Soňky synpda abstrakt usullary kesgitlemek m...

Sorag-jogap: Soňky synpda abstrakt usullary kesgitlemek mümkinmi?

Toparda çap edildi
Bu gyzykly we möhüm sorag, Java dörediji wezipesi üçin telefon arkaly söhbetdeşlik wagtynda okyjylarymyň birine berildi. Java dilinde abstrakt synp döretmegiňfinal mümkin däldigini bilse-de , soragyň sözleri bilen bulaşdy. Jogap ýönekeý: ýok, finalbir klasda abstrakt usullar bolup bilmez. Näme üçin? Sebäbi Java dil synpynda abstrakt usuly yglan eden badyňyza bu synp awtomatiki abstrakt bolýar we finalJava dilinde abstrakt synp edip bilmersiňiz. Bu “Java-klass” -da abstrakt usullaryň finalbolup bilmejekdigini aňladýar.
Sorag-jogap: Soňky synpda abstrakt usullary kesgitlemek mümkinmi?  - 1
Java döredijileriniň köpüsi, sözlemi sebäpli bu soraga jogap berenlerinde bulaşýarlar. Soragy beren adam umumy düşünje bilen tanyş bolsa-da, bir synpyň içindäki abstrakt usuly yglan edeninden soň abstrakt bolup biljekdigine düşünip bilmez we finalJava-da abstrakt synp edip bilmersiňiz. Bu nokat bu soragy has ýygy-ýygydan we ýygy-ýygydan berilýän soragdan aýyrýar: Java-da bir wagtyň özünde abstrakt we gutarnykly bir synpy yglan edip bolarmy? finalBir klasda abstrakt usuly yglan etmegiň mümkin däldigini görkezmek üçin bir mysal koduna seredeliň . Abstrakt usuly bolan Hello.javasynpymyz bar . public finalHelloprint()
public final class Hello {
  public abstract void print();
}
Bu kody IDE ýazyň, aşakdaky ýalňyş habary alarsyňyz, Helloabstrakt usullaryň yglan edilmegi üçin abstrakt synp bolmaly diýýärler.
Sorag-jogap: Soňky synpda abstrakt usullary kesgitlemek mümkinmi?  - 2
Sorag-jogap: Soňky synpda abstrakt usullary kesgitlemek mümkinmi?  - 3
Bu kody Notepad-a ýazsaňyz we buýruk setirinden javac kömekçi programmasyny ulanyp düzseňiz, şol bir zat bolar. Java spesifikasiýalaryna görä, bir synpyň içinde abstrakt usuly yglan eden badyňyza, bu synp abstrakt synpa öwrülýär we finalJava-da abstrakt synp edip bilmeýänligiňiz sebäpli, düzüji ýalňyşlyk döreder. Bu, ýokary derejeli synplar we Java dilindäki öýjükli synplar üçin hem dogry. Höweslendirilen synpda abstrakt usuly yglan etseňizem final, ýalňyşlyk birmeňzeş bolar. Anotherene bir baglanyşykly sorag: Java-da abstrakt synpyň statiki usullary bolup bilermi? Jogap: hawa, edip bilerler, abstrakt synpda statiki usuly yglan etmekde hiç hili mesele ýok, sebäbi statiki usuly ulanmak üçin synpyň mysalyny döretmegiň zerurlygy ýok, olary diňe synpyň adyny ulanyp atlandyryp bolar. Aşakda görkezilişi ýaly Java-da statik bolan synpda Hellobir usuly goşmak üçin mysalymyzy üýtgedip bileris :main()
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
Görşüňiz ýaly, hiç hili düzüliş ýalňyşlygy atylmaýar. Bu kod kynçylyksyz düzülýär, sebäbi Java-da abstrakt synpda statiki usuly doly arkaýyn yglan edip bilersiňiz. Gysgaça netijeler Bir synpda abstrakt usuly yglan etmek mümkin däl final. Sebäbi muny edeniňizden soň, Java aýratynlyklaryna görä synp awtomatiki abstrakt bolýar. Java-da bir klas abstrakt bolup bilmeýändigi sebäpli final, bu kabul ederliksiz we düzüji size ýalňyşlyk goýbermek bilen gadagan eder. Emma statiki usullary ahyrky we abstrakt synplarda yglan edip bilersiňiz, bu ýerde hiç hili mesele ýok.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION