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

Gene bir noob sorusu(java)


Öne çıkan mesajlar

Mesaj tarihi:
Simdi 2 class yaptıgımı dusunelim biri Inh1 digeri Inh2 olsun ve Inh2 Inh1'den inherit etsin.Inh1'de set ettigim bir data memberı Inh2de gorebiliyo olmam lazım ama nasıl olacagını bulamadım.Constructor yoluyla gecirecem galiba ama iste yapamadım bir turlu yardım lutfen:)
Mesaj tarihi:
ya yok anlatamadım galiba.O kadarını biliom o kadar noob deilim:)
Soylemek istedigime gelince,..

Inh1'de atıyorum x degiskenim olsun.ben bunu Inh1'de setX(5) seklinde set edip, degerini 5 'e esitliyorum.Sonra Inh2'de getX() ile bu degeri almak istiyorum.

Su anki denemelerimde Inh2'de getX() yapınca null dönüyor yani, x'i Inh2'de almaya calısırken degeri kayboluyor ve ben bunun kaybolmamasını istiyorum.

Bu arada bilmiyorum birsey degistirir mi ama Inh1,Inh1.java adlı dosyada,
Inh2,Inh2.java adlı dosyada.

Ozel bir cagırma sekli olmalı diye dusunuyorum super()le falan ama iste bulamadım bir turlu.
Mesaj tarihi:
Oyle birsey mumkun degil.

Inheritance denilen sey, bir class'in, baska bir class'i extend etmesi mantigina dayali.

Orneginde,
Inh1 inh1 = new Inh1();
ile bir Inh1 objesi yaratiyorsun.
inh1.setX(5); dediginde bu objenin x fieldini 5 e esitliyorsun.

Inh2 inh2 = new Inh2();
yaptiginda, bir Inh2 objesi yaratiyorsun. inh1 ve inh2 farkli instancelar, birbirinden bagimsizlar.
Object a =new Object();
a.setValue(X);

Object b = new Object();
b.getValue(); yapip X i almayi bekliyorsun yani sen bir nevi, anlatabildim mi?

b

Inheritance suna yarar, bir class istiyorsun, bu class baska bir class'in tum ozelliklerini tasiyacak + bazi yeni ozellikler getirecek (veya bazi ozelliklerini degistirecek override edip)

Anlatabildim mi bilmiyorum, ama eger anladiysan,sorunu biraz degistirince soyle bir cevap verilebilir onu da vereyim

diyelim

public class Inh2 extends Inh1

bir method var, Inh1'in yaptigi seyleri aynen yapmak istiyorsun bu method'da bir de ufak bi detay eklemek istiyorsun, yapman gereken su:


public void method()
{
super.method();

sonra buraya yapacagin eklentiler
}



nasil this objenin kendisine pointersa, super da inherit edildigi class'a pointer.
Mesaj tarihi:
annadım, super şöyle bişe


said:
public class Inh2

{

protected double x, y;



public Inh2 (double a, double b)

{

Inh2_hede(a,b);

}



public void Inh2_Set(double a, double b) { x=a; y=b; }

public double Read_X () {

return x;

}
}



said:
import Inh2;

public class Inh1 extends Inh2

{

protected double p;



public Inh1()

{

//Inh1 kalitim yaptigi Inh2 sinifinin kurucu metodunu

// super ile çağır

super(0,0);

Inh1_blabla(0);

}



public Inh1(double r, double a, double b)

{

super(a,b);

Inh1_blabla(r);



}

public double Inh1_Set()

{

return y;

}
}
Mesaj tarihi:
napmışın ben:), çok fazla değişken var ortada ama super'ı nası çağırıcağın fln anlamışındır herhalde ehehe, 2 sene önceki stajımdan beri javaya dokunmadım bukadar kalmış akılda. C# ftw!
Mesaj tarihi:
hmm tamam anladım sanırım, o zmn bir classtan aldıgın degerleri digerine gecirme gibi bir sansın yok mu?

Bende stajdayım su an,yeni yeni ogreniyorum:)
Mesaj tarihi:
Yani, dolayli yoldan var, kulagini kolunu diger taraftan dolandirip tutmak istiyorsan falan :)

birinci secenek, SetX i overload edersin bi de iki parameter alan bi SetX yazarsin, birincisi deger, ikincisi Inh2 objesi olur, onu da set eder degere :)


public void setX (int value, Inh2 inh2) {
this.x = value;
inh2.setX(value);
}


Ikinci yontem, inh1'in x i set edip, yeni bi inh2 yaratip onun da degerini set edip o objeyi dondurur


public Inh2 setX (int value) {
this.x = value;
Inh2 inh2 = new Inh2();
inh2.setX(value);
return inh2;
}


Sonra iste
Inh2 inh2 = inh1.setX(5);
yaparsin.

Ha tabi bu yontemler cok lamerce, illa boyle bisey istiyorsun diye ornek verdim, ve inheritance ile yakindan uzaktan alakasi yok herhangi bir class'a yaparsin :) Inheritance'in mantigi farkli.

Inh1'in Insan, Inh2'nin ise erkek oldugunu dusun. Bir erkek insan olmanin tum ozelliklerine sahipken kendi spesifik ozellikleri var. Ama bir insanda yaptigin degisiklik, baska bir erkek'i etkilemez, o da ozunde insan olmasina ragmen.

Bok gibi de bir ornek oldu ya hehe
Mesaj tarihi:
ya inheritance'a hep araba ornegi verilir.
Yok butun arabalarda pencere vardır da , BMW'de sunroof vardır geri kalan butun ozelliklerini arabadan alır falan:)
Ama seninki daha yaratıcı olmuş:)
Mesaj tarihi:
Yanlış anlamadıysam yaptığın şeyi static keyword'üyle yaparsın. Static o class için genel bir değişken yaratmanı sağlar şöyle olacak bak:

kod

public class A
{
static private int x;
static public int getX()
{
return this.x;
}
static public void setX(int x)
{
this.x = x;
}
}

public class B extends A
{
}


main()
{
A.setX(5);
System.out.println(B.getX());
}



Syntax hatası yapmışsam affola :). Ama anladığım kadarıyla bir class için genel bir değişken yaratmak istiyorsun. Bu genellikle işte köpek class'ı için mesela köpek sayısını saklamak için kullanılır veya banka hesapları için toplam hesap sayısı. Diğer bir kullanım amacı benzer method'ları bir grup altında toplamak. Math.random() veya Math.cos() gibi, ama böyle kullanıcaksan class'ı abstract de yapman güzel olur.

Neyse senin istediğini düşündüğüm şey bu. :) Burada dikkat etmen gereken bir de şu var, static method veya variable kullanırken instance yaratmana gerek yok, hatta yaratırsan hata çıkar. Static'ler class'a aittir instance'a değil. Yardımcı olabilmişimdir umarım :)
Mesaj tarihi:
Stblack, yapmak istediğin şey ne? Neden inheritance kullanmak istiyorsun? Tam olarak ne yapmak istediğini anlamadım ama class, object, static method gibi kavramları iyice öğrenmeden inheritance'a girişmiyorsundur umarım. Okuduklarımdan anladığım kadarıyla class, object gibi kavramları okuyup öğrenmişsin, ama sanki daha tam oturmamış gibi.

Saykoleo, static metod içinde this kullanmış olman dışında sorun yok. Ama pek de gerekli bir inheritance kullanımı değil gibi. Zaten static method'lar override edilemez, dynamic binding de yok. Sadece üst class'ın metoduna ulaşmış oluyorsun.

Saykoleo said:
Burada dikkat etmen gereken bir de şu var, static method veya variable kullanırken instance yaratmana gerek yok, hatta yaratırsan hata çıkar. Static'ler class'a aittir instance'a değil.


Ne yazık ki instance üzerinden static metod çağırırken hata çıkmıyor, compiler uyarı veriyor sadece. static bir foo metodu varsa A.foo() yerine new A().foo() da çağrılabiliyor. Ne yazik ki diyorum çünkü mantıklı bir şey değil. Yazmış olduğun gibi static instance'a ait bir şey değil.
Mesaj tarihi:
@Saykoleo

Tesekkurler , bende denedim static yontemini ama olmadı garip bir sekilde ama yapmak istedigim seyi.File kullanarak hallettim.

@Mirage

Inheritance kullanmaya calısmamın sebebi soyledigim seyi inheritance yoluyla yapabilecegimi dusunmustum, aklıma birsey gelmedi onu denedim.Zaten file ile halledince inheritance'a gerek kalmadı cunku zaten birbirleriyle cok alakasız classlar.Birisi process calıstırıp shell'e script falan yazdırdıgım bi class, digeri de hazırladıgım interface class'ıydı.3 hafta once basladım staja,ve bir anda cok fazla sey ogrenmem gerekti,interface yaptım,external process calıstırdım falan derken Java'nın temelinden biraz saptım, acıkcası cok da fazla okuyacak zamanım olmadı.

Ama yardımlarınız icin tesekkurler bu yazdıklarınızdan baya bisey ogrendim:)
×
×
  • Yeni Oluştur...