Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Java Sorularım (Takıldıkça Soru Eklenecek)


Buddha

Öne çıkan mesajlar

hayır olmaz çünkü 2003 sürümünün 64 biti yok. Sitesinden 1 ay kullanımlık versiyonu yada malum yerlerden indirebilirsin.

Geçen dönem ben de bu konuda bir proje yapmıştım , sorucağın bişi olursa ö.m. atarsın. Ben mysql - msaccess arasında database senkronizasyonu yapmıştım proje olarak.
Link to comment
Sosyal ağlarda paylaş

Arkadaşlar şimdi 3 tane clasım var;

abstract Personel

Doktor extends Personel

Test

Şimdi ben

Personel[] liste = new Personel[];



Diye bir array bellek oluşturuyorum. Sonra döngü içinde

liste[i ] = new Doktor()

boş cons. metodumda doktor türünden bellek oluşturuyorum. Sonra Test classı içinden Doktor'daki set metodu ve personeldeki set metodları yoluyla değer atamak istiyorum değişkenlerime. Personel'deki set çalışıyor ama Doktor'daki set metodu bulunamadı diye hata alıyorum. Sebebi nedir?

Edit = i'nin yanındaki boşluk mecburen burda koydum gorunmuyor yoksa forumda.
Link to comment
Sosyal ağlarda paylaş

Şimdi ben neden hata verdiğini biliyorum PErsonel türünden Doktor oluşturdum. Bu yüzden Doktor'da olan methodların aynından Personel'de yoksa bulamıyor. Ama Doktor'daki constractor methodu buluyor. Yani beni ben Personel türünden Doktor oluşturursam Doktor'a değer sadece constractor methoduyla mı atabileceğim?
Link to comment
Sosyal ağlarda paylaş

hayir.

bi kere default constructor'i her sekilde cagirabilirsin eger class'in kendisi abstract degilse tabi, o kafani karistirmasin.

aynen dedigin gibi, sen bi Personel array'i yaratiyorsun. Bunu doktor da extend edebilir, temizlikci de extend edebilir, hemsire de extend edebilir vs. Eger bunlar personel abstract class'ini extend ediyorlarsa, implement edecekleri abstract methodlar olmasi lazim personel class'inin icinde. personelden extend ettigin tum classlarin, bu abstract methodlari implement etmesi lazim.

sonra, personel arrayi yaratip icine doktor hemsire zart zurt attigin zaman, extend eden class'in ne olduguna bakmadan bu abstract methodlari cagirabilirsin. hangi class'sa onun implementationini kullanir.

dogrusu bu, onun haricinde illa doktora yonelik bisey yapman gerekiyorsa mesela o arrayle ugrasirken, sunu yapabilirsin.


if (array[i ] instanceof Doktor)
{
Doktor dok = (Doktor) array[i ];
dok.Doktoraozelmethod();
bla bla bla
}


edit: hay [ ] yuzunden formatina sicildi yazinin 23483242 kere editliyorum
Link to comment
Sosyal ağlarda paylaş

emircanz said:

www.eclipse.org indir kod yazarken çok rahatlarsın. bi de bizim bi tane hocamız kod yazmanın %90 ı copy pastedir demişti aklında olsun o yüzden kodları internetten bulup yazmada sorun etme eğer ki kodu anlayabiliyosan.
o hocayi cope at direk
kodun 90%'ini netten bulacagin libraryleri kullanip yazmamak ayri bisey, kod c/p etmek ayri bisey. ki ogrenme surecinde olan bi insanin ilkini de yapmamasini oneririm eger abarti bisey degilse yapmak istedigi.
Link to comment
Sosyal ağlarda paylaş

Abi benim 2 tane (Doktor, Hemsire) Personel'e extend classım var. Abstract methodlarda içinde mevcut. Claslarımda sorun yok. Test clasımsa bunlarla aynı klasörde ve ben burda bir array oluşturup içine hem doktoru hemde hemsireyi atıcam. Şimdi doktorda (int x, string y, string c, string z) var hemsirede (int x, string y, string c) var. Altı çizili olanları Personel'den çağırıyorlar çizili olmayanlarda o classlara ait. Şimdi ben bu şekilde bu cons methodları kullanarak arrayimde hem personel ve doktora ait değer atabiliyorum hemde personel ve hemşireye ait.

Buraya kadar herşey güzel. Benim anlamadığım hoca bize demiştiki cons method bir classta bir kere çağrılabilir. Biz bu yüzden set get emthodları ekledik bu classlara. Şimdi ben set ve getleri kullanamıyorum direkt olarak demi? Soru saçma oldu evet kullanamıyorum. Sende diyorsun ki kullanabiliyorsun ama öyle direk olarak kullanamıyorsun şayet değişkenin Personel türündense?
Link to comment
Sosyal ağlarda paylaş

ya şöyle düşün zaten bilmeyen bi insan copy paste yapsada anlamaz ama mesela bilindik bi program yazıcaksın kodun oturmuş belli başlı yerlerini aynen alıp üstünde oynarsın kendi istediğin gibi onu demeye çalışıyorum. ki burdada zaten eğer java bilmezsen oynıyamazsın bile kodla. hoca da o mantıklı söylemiştir herhalde çünkü geçmişi oldukça iyi bi hoca :P
Link to comment
Sosyal ağlarda paylaş

Penthesilea said:

Eger bunlar personel abstract class'ini extend ediyorlarsa, implement edecekleri abstract methodlar olmasi lazim personel class'inin icinde. personelden extend ettigin tum classlarin, bu abstract methodlari implement etmesi lazim.[code]


implement etmesi derken bu methodların miras alan classlarda da mevcut olması lazım demek istiyorsun değil mi? Öyleyse mevcut. Ama mesela bir Compareble'i implement etmeyi öğrendik o sadece implement ettiğin classın içinde Comaparble methodunun olması gerekiyor. Ben Personel classına Comparble'i impelement ettim içinde de compareTo methodum mevcut. Bunları alt classlarada uygulamam gerek diye bişey yok demi?

Buda 2. sorumdu.

@emircanz;

Abi ben bilmediğim yeni öğrendiğim için söylediğin bana yaramaz. Bir sürü partik yapmam lazım kendim yazarak otursunlar kafada diye.
Link to comment
Sosyal ağlarda paylaş

anasini satayim o kadar yazdim nereye gitti bilmiyorum tab degistirirken yokoldu.

evet, comparable'i sadece personal'de implement etmen yeterli. eger bi class digerini extend ediyorsa, otomatik olarak o class'in extend ettigi her seyi extend eder.

constructor kisminda bi duzeltme yapayim. class degil object demen gerekiyor orada, yani ne dedigini anladim da dogru terminoloji kullanmak gerekirse: bir class'in constructor'i her cagirildiginda o class'a ait bir object yaratir. yani Doctor doc = new Doctor(); yeni bir doctor objecti yaratip doc variable'ini buna assign eder. Istersen constructor'i milyon defa cagirabilirsin. her seferinde yeni bi object yaratir, ve doc = new Doctor() diye cagirirsan her seferinde, yeni object'i bu doc variable'ina atar. doc variable'ina atali olan eski object erisilemez olur ve garbage collector tarafindan toplanir.

setter ve getter konusunda dediklerin dogru. onemli nokta su, object oriented programming prensiplerine gore eger bi personel arrayi uzerinde islem yapicaksan, sadece personel'in methodlariyla ugrasman lazim. illa yapmak istiyorsan ust msglarda dedigim instanceof muhabbetini yapabilirsin. ama dogru olani gerekirse problemi bastan dusunup personal class'inda tum isini gorecek abstract methodlar yaratmak (bunlara getter ve setterlar dahil) ve bunlari doktor ve hemsire classlarinda ayri ayri implement etmek.

eger cozmeye calistigin sorunu yazarsan daha rahat dizayn fikri verebilirim.
Link to comment
Sosyal ağlarda paylaş

Öncelikle çoook teşekkürler yardımların için.

Abi bak classlarım burda;

http://www.dosya.tc/server2/JHuTyG/5.Hafta.rar.html

Test classı içindeki döngüye dikkat et constractor methoda veri gönderiyorum. Burda set methodunun personelde abstract olarak oluşturursam gereksiz olmaz mı? Sonucta Personel'de set methodları abstact açarsam boş yere mesela doktorun set methodunuda hemşirede açmam gerekcek yığın gibi olacak. Sen kodlara bi bak abi bu işin doğrusu budur dersen ben ilerde de bu şekilde kullanayım.

Hani anlamak istediğim şey şu personel türünden doktor oluşturdun mu doktorun constrator'ını kullanacan. Set get methodlarıda doktor türünden oluşturduğunda işini görür onlarında amacı odur. Dersen tamamdır ben çaktım olayı.

Onların dışında da;

1- Abstrach classlar ne zaman lazım olur kulllanım yerleri nelerdir bir kaç örnek.

Şu sorularımı cevaplarsan şuana kadar işlediğimiz konular baya kafamda oturmuş olacak. Bu hafta sonu collectionlara geçiyoruz onlara geçmeden bunları kafada iyice oturtayım diyorum.
Link to comment
Sosyal ağlarda paylaş

  • 4 hafta sonra ...
Simdi benim 2 tane classım var.

abstract class A implements Comparable
class B extends A

Baglantılar bu sekilde. Şöyle bir hata alıyorum B'yi compile edince;

B is not abstract and does not override abstract method compareTo in java.... Comaprable

Şimdi ben A'nın içine compareTo methodu yazmak zorundayım. Yazdımda. Ama castingle uğraşmamak için A'nın içindeki compare to metodu A cinsinden değer alıyor. compareTo(A x) seklinde.

Onu illa Objeckt mi yapmam gerekiyor? Eğer öyleyse neden A classı compile olurken hata vermiyorda alakasız B classı hata veriyor?
Link to comment
Sosyal ağlarda paylaş

Buddha said:
Şimdi ben A'nın içine compareTo methodu yazmak zorundayım.


A abstract olduğu için compareTo metodunun içeriğini A class'ında yazmak zorunda değilsin. Metodu abstract olarak tanımlarsan alttaki class'ların implement etmesini zorunlu tutmuş olursun. Hatta hiç tanımlamazsan otomatik olarak abstract tanımlanmış varsayılır.

A'da metodu implement edersen B'de de tanımlamak zorunda kalmazsın.

Buddha said:
Ama castingle uğraşmamak için A'nın içindeki compare to metodu A cinsinden değer alıyor. compareTo(A x) seklinde.

Onu illa Objeckt mi yapmam gerekiyor? Eğer öyleyse neden A classı compile olurken hata vermiyorda alakasız B classı hata veriyor?


Java 5 ve üstü kullanıyorsan Comparable interface'i generic'tir. Class'ı "abstract class A implements Comparable" diye tanımlarsan compareTo metodu A cinsinden parametre alır. Generic parametresini boş bırakırsan otomatik olarak Comparable cinsinden olduğu için casting'i kendin yapmak zorundasın.

Comparable'ı generic tanımlamazsan ve kendin compareTo(A hede) diye bir metod tanımlarsan, compareTo(A hede) metoduyla interface metodunu implement etmiş olmuyorsun. Overload etmiş oluyorsun. O yüzden B class'ında hala compareTo(Object) tanımlamanı bekliyor. Yani ya generic tanımlicaksın ya da compareTo(Object) metodunu class'ların birinde tanımlayacaksın.
Link to comment
Sosyal ağlarda paylaş

Öncelikle teşekkürler dediğiniz gibi yaptım sorun çözüldü. Ama kafa takılan bir kaç nokta var.

Mirage said:

Metodu abstract olarak tanımlarsan alttaki class'ların implement etmesini zorunlu tutmuş olursun. Hatta hiç tanımlamazsan otomatik olarak abstract tanımlanmış varsayılır.


Burayı anlamadım. Benim abstract classımda abstact olmayan methodlarım var onları abstract tanımlamadım ve otomatik abstract method olmadılar. Yani daha doğrusu alt sınıflara eklemediğim halde hata vermiyorlar.

Mirage said:

Comparable'ı generic tanımlamazsan ve kendin compareTo(A hede) diye bir metod tanımlarsan, compareTo(A hede) metoduyla interface metodunu implement etmiş olmuyorsun. Overload etmiş oluyorsun. O yüzden B class'ında hala compareTo(Object) tanımlamanı bekliyor. .


Yani ben A cinsinden yazınca methodu genericte tanımlamadıgım halde onu normal bir method olarak görüyor ve A classım'da compareTo isminde method oldugu için onun alt sınıfından mı istiyor? Yani anlamak istediğim neden A'da object compareTo istemiyorda B'den istiyor. A abstact ama onda yoksa alt sınıflardan birinde illa compareTo object isterim mi diyor comparable? Generic yapmadıkça?

Mirage said:
Yani ya generic tanımlicaksın ya da compareTo(Object) metodunu class'ların birinde tanımlayacaksın.


Burda da merak ettiğim genellikle hangi yol kullanılıyor? Generic bana daha mantıklı geldi ama bilmediğim herangi bir dezavantajı var mı? Yada programcılılar genelde hangisini kullanıyor bende ilerde ona göre hareket edim.

Çok soru oldu kusura bakma. Ayrıca generic tanımlamayıda hoca öğretmemişti öğrenmem iyi oldu teşekkürler.
Link to comment
Sosyal ağlarda paylaş

Buddha said:

Burayı anlamadım. Benim abstract classımda abstact olmayan methodlarım var onları abstract tanımlamadım ve otomatik abstract method olmadılar. Yani daha doğrusu alt sınıflara eklemediğim halde hata vermiyorlar.


Comparable interface'ini implement ettiğin zaman senden compareTo metodunu tanımlamanı bekler normalde. Ama sınıfın abstract olduğu için o metodu tanımlamayabilirsin. Metodu abstract olarak tanımlamış gibi oluyorsun bu durumda. Şu iki sınıf aynı sayılır yani:


public abstract class A implements Comparable<A> {

}

public abstract class A implements Comparable<A> {
public abstract int compareTo(A a);
}


Buddha said:

Yani ben A cinsinden yazınca methodu genericte tanımlamadıgım halde onu normal bir method olarak görüyor ve A classım'da compareTo isminde method oldugu için onun alt sınıfından mı istiyor? Yani anlamak istediğim neden A'da object compareTo istemiyorda B'den istiyor. A abstact ama onda yoksa alt sınıflardan birinde illa compareTo object isterim mi diyor comparable? Generic yapmadıkça?


Son söylediğin doğru. İlk söylediğin de negasyonu unuttuğunu varsayarsam doğru. :)

A abstract olduğu hiçbir metodun A'da tanımlanması şart değil. B sınıfı abstract olmadığı için gereken tüm metodların ya B'de ya A'da tanımlanmış olması gerekiyor. Generic olmadan Comparable implement edince ya B'de ya A'da compareTo(Object) metodunu arıyor. İkisini de bulamadığı için hata veriyor. A'da compareTo(A) yazmış olman bir şey ifade etmiyor yani. Örnek:



public abstract class A implements Comparable {

// Bu metodun interface ile ilgisi yok.
public int compareTo(A a) {
return 0;
}

/*
* Bu metod Comparable interface'inin metodu.
* Bunu tanımlamasan compiler bu şekilde abstract
* olarak tanımlayacak bunu.
* Alt sınıflarda implement etmen lazım.
*/
public abstract int compareTo(Object o);

}



Buddha said:

Burda da merak ettiğim genellikle hangi yol kullanılıyor? Generic bana daha mantıklı geldi ama bilmediğim herangi bir dezavantajı var mı? Yada programcılılar genelde hangisini kullanıyor bende ilerde ona göre hareket edim.


Java 5 ve üstü kullanıyorsan generic kullanman çok daha iyi tabii ki. Bir dezavantajı yok.
Link to comment
Sosyal ağlarda paylaş

Mirage said:

String'i == ile değil equals metodu ile karşılaştırman lazım. if("ı".equals(cevapArray2[j])) şeklinde. == operatörü referansların aynı nesneyi gösterip göstermediğine bakar, eşitliğe değil.

edik: köşeli parametre için i sorun çıkartıyor die j yaptım.

evet equals yapmak lazımmış. yaptım oldu :)
bu .net'ten eclipse geçincede adam bi dumur oluyor tabi :P
Link to comment
Sosyal ağlarda paylaş

×
  • Yeni Oluştur...