Şimdi Ara

Java-Kalıtım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
11
Cevap
1
Favori
506
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhabalar;
    Kalıtımla ilgili bir sorunu çözemedim. Şimdi örneğin taşıt adlı bir üst classımız var. Taşıt adlı class ın marka ve model adlı iki tane özelliği var. Bu taşıt üst classından otomobil adında bir alt class üreterek miras aldım. Main metotta taşıt üst class'ından t adında bir nesne ürettim. Bu T nesnesinin marka ve model özelliklerini belirttim. Ardından otomobil alt class'ından oto adlı bir nesne ürettim. İşte sorunum burda başladı.

    Otomobil nesnesinin marka ve modeli özelliklerini yazdırdığım zaman boş değerler geliyor. Ama otomobil nesnesi t nesnesi özelliklerini miras alması gerekmiyor muydu?



  • Birincisi, Kalitim , miras laflari yerine inheritance ve extend kullanirsan daha anlasilir olur. Turkce her ne kadar ana dilimiz olsa da bu cevirilerden hic bir sey anlamak mumkun degil. Ikincisi kod paylasabilir misin ?
  • Aslına ilk başta terimleri İngilizce yazmıştım ama anlaşılmaz diye Türkçe'ye çevirdim :d

    En başta içine hiçbir kod yazmadan 3 adet sınıf ürettim. 1.sınıfım Tasıt adlı superclass. 2. sınıfım otomobil adlı subclass'ı tasıt sınıfını extends yaparak ürettim. 3. sınıfın ise main metodunun olduğu Test adlı sınıf.


    Taşıt adlı superclass ta tipi int ismi model olan ve tipi string ismi marka olan iki adet özellik tanımladım. Bu özellikler için Setter ve getter metodlarını yazdım.

    İçerisinde main metodu olan test sınıfına geçip taşıt adlı superclasstan tst adlı nesne ve otomobil adlı subclass tan oto adlı nesneler ürettim.
    tst nesnesinin marka ve model özelliklerinin set metoduyla atadım. Buradan sonra sorunum başladı.

    Ekrana oto adlı nesnenin marka ve model özelliklerini yazdırmak istediğimde null ve 0 yani boş geldi. Ama oto nesnesi tst nesnesinden bu iki özelliği alması gerekmez miydi.?

    Kod eklemeye çalışacağım. Teşekkürler.




  • Sadece altsınıftan üreteceksin objeyi. Ve altsınıfın setter ve getter metodlarını kullanacaksın.
  • Çok teşekkürler cevap için.

    Peki bunun bir açıklaması veya nedeni var mı? Yok bu bir kural mı?
  • Açıklaması bu işte. Senin yaptığın hem hatalı hem mantıksız. 2 ayrı obje üretip sadece birini kullanıma hazırlıyorsun, diğeri ham halde kalıyor.
  • Evet şimdi anladım. Zaten başta mantıksız geliyordu ama işte insan nedenini ya da açıklamasını öğrenmek istiyor.
    Çok teşekkürler tekrardan.
  • Bir sorum daha var.

    Main metodunun bulunduğu sınıfta superclasstan ve subclasstan ürettiğim iki adet nesnenin birbirleriyle bir ilişkisi olur mu?
    Yani iki nesne arasında, sınıflarının arasında oluşan inheritance ilişkisi gibi bir şey oluşur mu?



    < Bu mesaj bu kişi tarafından değiştirildi publicclass -- 8 Mayıs 2015; 11:31:38 >
  • quote:

    Orijinalden alıntı: publicclass

    Bir sorum daha var.

    Main metodunun bulunduğu sınıfta superclasstan ve subclasstan ürettiğim iki adet nesnenin birbirleriyle bir ilişkisi olur mu?
    Yani iki nesne arasında, sınıflarının arasında oluşan inheritance ilişkisi gibi bir şey oluşur mu?

    Senin sorunun da bu ahbab! Sen inheritence yapinca, subclass in metodlarinin ; parent class in metodlarini cagirinca cagrilacagini dusunuyorsun. Oyle bir sey yoK. Child uzerinde de getter setter metodlarini cagirman gerek. O halde inheritence ne ise yaradi dersen, extend eden class lar, override etmedikleri muddetce parent classlarinin private olmayan metodlarindaki gibi davranirlar. Yani sen tasit class inin getter ve setter ini bir kere yazarsin, sonra ucak, tren, bisiklet vb diger hic bir class icin yazmassin ama onlarin setter ve getter larini cagirabilirsin ve hepsi ayni kod blogunu calistirir. Sen, setter gettet cagirmadigin icin default deger goruyorsun. Bir de soyle bir hata daha var, tasit class i abstract olmali. Tasit dedigin abstract bir fikir çünkü. Bu sebeple sen tasit diye bir instance uretememeli, o ilişkinin önce bir adini koymalisin :)

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: elektro_gadget

    Sadece altsınıftan üreteceksin objeyi. Ve altsınıfın setter ve getter metodlarını kullanacaksın.

    Hayir, Tasit otomobil = new Otomobil(); de yapabilir, direkt alt sinifa calisirsa inheritence nimetlerinden tam faydalanamamis olur. Ondan sonra otomobil.set, otomobil.get yapinca abisinin metodlarini kullanacak.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Tamamdır. abstact anahtar kelimesiyle netleşti çoğu şey. Ayrıca açıklamalar çok faydalı oldu.

    Zaman ayırdığınız için çok teşekkür ediyorum.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.