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)


Stblack

Öne çıkan mesajlar

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.
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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;

}
}
Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

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 :)
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

@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:)
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...