psevdo abstraktni klasove?
7 отговора
235 прегледа
psevdo abstraktni klasove?
Za6to slednoto se kompilira:
JFileChooser j=new JFileChooser();
j.setFileView(new FileView(){});
sled kato FileView e abstrakten klas? Poglednah dokumentaciqta i vidqh 4e vsy6tnost FileView e deklariran kato abstrakten, no nqma abstraktni metodi. Qvno zatova ne dava gre6ka. No za6to togava klasyt e abstrakten?
Nqkoi popadal li e na ne6to podobno i dokumentirano li e tova?
The things are awlays changing, I feel that it`s allright
JFileChooser j=new JFileChooser();
j.setFileView(new FileView(){});
sled kato FileView e abstrakten klas? Poglednah dokumentaciqta i vidqh 4e vsy6tnost FileView e deklariran kato abstrakten, no nqma abstraktni metodi. Qvno zatova ne dava gre6ka. No za6to togava klasyt e abstrakten?
Nqkoi popadal li e na ne6to podobno i dokumentirano li e tova?
The things are awlays changing, I feel that it`s allright
Re: psevdo abstraktni klasove?
new FileView(){}
тоя ред ти създава анонимен (май така беше) клас, който наследява/реализира класа/интерфейса FileView.
тоя ред ти създава анонимен (май така беше) клас, който наследява/реализира класа/интерфейса FileView.
da, oba4e
pri nasledqvane na abstrakten klas trqbva da se definirat abstraktnite metodi. A nai-strannoto e 4e za FileView ima dve razli4ni dokumentacii:
JavaTM 2 Platform
Standard Edition vsi4ki metodi sa dadeni kato abstraktni. T.e. az trqbva da gi realiziram, ako iskam nasledqva6tiq klas da ne byde abstrakten i sledovatelno da moje da se instancira. Sledovatelno new FileView(){} ne bi trqbvalo da se kompilira, vypreki 4e e vytre6en anonimen klas.
v JavaTM 2 Platform
Std. Ed. v1.4.1 pyk nito edin metod ne e daden kato abstrakten. Tuk izglejda vyzmojno da se instancira, no typoto e, 4e klasyt vse pak e deklariran kato abstrakten v dokumentaciqta!
music non stop
JavaTM 2 Platform
Standard Edition vsi4ki metodi sa dadeni kato abstraktni. T.e. az trqbva da gi realiziram, ako iskam nasledqva6tiq klas da ne byde abstrakten i sledovatelno da moje da se instancira. Sledovatelno new FileView(){} ne bi trqbvalo da se kompilira, vypreki 4e e vytre6en anonimen klas.
v JavaTM 2 Platform
Std. Ed. v1.4.1 pyk nito edin metod ne e daden kato abstrakten. Tuk izglejda vyzmojno da se instancira, no typoto e, 4e klasyt vse pak e deklariran kato abstrakten v dokumentaciqta!
music non stop
Re: psevdo abstraktni klasove?
new FileView(){}
Kompilira zaradi { }.Priema 4e predefinira6 klasa. Toi si e abstracten.
Triabva da se implantira za da se izpolzva.A kak se izpolzva moje6 da vidi6 v repertoira na tvoia jdk:
SDK/demo/jfc/FileChooserDemo/src
Kompilira zaradi { }.Priema 4e predefinira6 klasa. Toi si e abstracten.
Triabva da se implantira za da se izpolzva.A kak se izpolzva moje6 da vidi6 v repertoira na tvoia jdk:
SDK/demo/jfc/FileChooserDemo/src
Re: psevdo abstraktni klasove?
:( tva go gledah. Problema mi ne e v izpolzvaneto. To se kompilira i si raboti. Problemyt e 4isto teoreti4n - spored mene ne bi trqbvalo da e taka. Pi4ovete v primera na SDK sa raz6irili abstraktniq class i sa rezlizrali metodite mu. Sled tova instancirat raz6ireniq klas, koito ve4e ne e abstrakten. A az ne implementiram kiorav metod. vqrno, instanciram vytre6no ne samiqt FileView, a negov naslednik. Samo 4e sled kato nqsledqva6tiq klas ne definira abstraktnite metodi, toi sy6to e abstrakten. I ne moje da se instancira. Zatova new FileView(){} ne bi trqbvalo da se kompilira.
Edinstvenoto obqsnenie e, 4e avtomati4no se syzdavat prazni realizacii na abstraktnite metodi. No tova nikyde ne e dokumentirano :( Pone az ne sm go vijdal.
Taka de, sled tolkova prikazki, misylta mi e, 4e tyrsq teoreti4no obqsnenie na problema, koito mi se struva adski stranen...
дао дъ дзин
Edinstvenoto obqsnenie e, 4e avtomati4no se syzdavat prazni realizacii na abstraktnite metodi. No tova nikyde ne e dokumentirano :( Pone az ne sm go vijdal.
Taka de, sled tolkova prikazki, misylta mi e, 4e tyrsq teoreti4no obqsnenie na problema, koito mi se struva adski stranen...
дао дъ дзин
Ами точно,
защото няма абстрактни методи, затова успява да се компилира, т.е. не е необходимо да наследяваш каквото и да е - просто няма такива методи, които трябва да се наследят задължително.
В случая тоя клас (FileView) се отличава от нормалните класове единствено по това, че не може да се създават обекти от него.
Виж не знам каква е точно дефиницията на абстрактен клас в Java - в C++ абстрактен клас е клас, който има поне една pure-virtual функция (май така беше). В Java явно не е така (тук abstract може да обявиш самия клас). Сигурно дефиницията е, че не не можеш да създаваш обекти от тоя клас (не съм много сигурен).
В случая тоя клас (FileView) се отличава от нормалните класове единствено по това, че не може да се създават обекти от него.
Виж не знам каква е точно дефиницията на абстрактен клас в Java - в C++ абстрактен клас е клас, който има поне една pure-virtual функция (май така беше). В Java явно не е така (тук abstract може да обявиш самия клас). Сигурно дефиницията е, че не не можеш да създаваш обекти от тоя клас (не съм много сигурен).
Re: psevdo abstraktni klasove?
"Samo 4e sled kato nqsledqva6tiq klas ne definira abstraktnite metodi, toi sy6to e abstrakten." - tuk rabotata e takawa che naslediawashtia (w sluchaia anonimen klas) klas niama nujda da implementira nishto zashtoto metodite na FileView si imat defaultna implementacia. Sledowatelno anonimnia klas koito naslediawa tozi FileView ne e abstrakten i moje da se prawi instatiation.
cheers
cheers
Re: psevdo abstraktni klasove?
ami da! Ti si prav vsy6tnost. Namerih otgovora v specifikaciqta na ezika:
"8.1.1.1 abstract Classes
An abstract class is a class that is incomplete, or to be considered incomplete"
Strannoto e vse pak, 4e nikyde ne e qsno dokumentirano, 4e edin class moje da byde deklariran kato abstrakten, bez v deistvitelno da e takyv /*t.e. da ima abstraktni metodi */.
10x na vsi4ki vse pak, izqsnihme vyprosa
"Така е то", казват тралфамадорците, когато някой умре
"8.1.1.1 abstract Classes
An abstract class is a class that is incomplete, or to be considered incomplete"
Strannoto e vse pak, 4e nikyde ne e qsno dokumentirano, 4e edin class moje da byde deklariran kato abstrakten, bez v deistvitelno da e takyv /*t.e. da ima abstraktni metodi */.
10x na vsi4ki vse pak, izqsnihme vyprosa
"Така е то", казват тралфамадорците, когато някой умре