Java'da Class Inheritance(Kalıtım) 1

narutomanga899

Katılımcı Üye
21 Nis 2013
384
0
City of Code
Evet arkadaşlar bu konuda kalıtım konusunu basitçe anlatacağım.

Konu Özeti:

Kalıtım(Inheritance), classlar(sınıflar) arasındaki bağlantılar diyebiliriz. İşlerimizi kolaylaştırmak için classları böleriz ve iş bölümünü daha iyi organize edebilirirz. Mesela 5 tane classımız var, bunların hepsinde isim methodu vardır, 2 sinde sayı, 3 ünde yaş gibi methodlar ayndır, ozaman bütün hepsi için özellikleri tek tek yazmak yerine aynı özellikleri taşıyanlara birer kez yazarak işi azaltmış oluruz. Bunu Inheritance ile yaparız. En tepedeki class hepsinin ortak özelliği olan classdır. Aşağıya doğru indikçe özelliklerde değişir. Mesela; En tepede Taşıt var ise onun altında ototmobil, kamyon, uçak gibi başka taşıtlar vardır. Otomobilin içinde Mercedes, Audi varken, uçaktada boeng ve airbus gibi ayrı classlar vardır. Burada tüm otomobil uçak vs hepsi isim, motor, renk gibi özelliklere sahip olduğu için bu özellikleri en tepedeki Taşıt clasına yazmamız yeterlidir. Alttaki uçakta pervane varken, otomobilde direksiyon vardır. Mercedeste konfor ayrıcalıklıyken, BMW de motor güçlüdür. İşte bu tip farklılıkları aynı veya farklı methodlar sayesinde yazabiliriz.

Bir kod örneğiyle Inheritance nasıl yazılır bakalım:

Kod:
public class Kitap
{
	protected int sayfa = 25;
	
	public **** setSayfa (int sayfa)
	{
		this.sayfa = sayfa;
	}
	
	public int getSayfa ()
	{
		return sayfa;
	}
}

İlk class'ımız Kitap clası. Burada integer(sayı) sayfa = 25 tanımlıyoruz. Burada sayfa ile ilgili set ve get methodlarını görüyoruz.

set ve get: Bu methodlar sayesinde içindeki değerleri dışarıdan doğrudan kullanabiliriz. Normalde bunu yapamayız, hatta dışarıdan ulaşılması imkansız olan private değerleini bile set get sayesinde dışarıdaki başka clasa çağırabiliriz. set, yeni bir değer vermemizi sağlarken, get varolan değeri olduğu gibi getiririr yani gösterir.

protected: Bu tanım, Inheritance bağlantısı olan classlar arasındaki kullanımı sağlar. Normalde public int x şeklinde yazarsak bu x değeri herkes tarafından ulaşılabilir, private yazarsak kimse ulaşamazi protected yazarsak Inheritance bağlantılı classlar ulaşabilir.

İkinci classımız:

Kod:
public class Sozluk extends Kitap
{
	private int kelime = 150;
	
	public **** setKelime (int kelime)
	{
		this.kelime = kelime;
	}
	
	public int getKelime ()
	{
		return kelime;
	}
	
	public double oranHesapla ()
	{
		return (double) kelime/sayfa;
	}
}

Bu Sözlük classında aynı set ve get methodlarını kelime için yapıyoruz.

extends: Burada Sözlük extends Kitap demek Kitap clası Sözlüğün üstünde yani atası konumunda demektir. Bu Kitabın sözlük olduğunu ve onun tüm özelliklerini taşıdığını gösterir çünkü sözlük bir kitaptır ama kitap bir sözlük değildir.(Yani kitap sözlük clasının özelliklerini taşımayabilir). Kelime belirlendikten sonra oranHesapla methodunda kelimeyi sayfa ya direk bölmüş. Bu classta kelime başta tanımlanmıştı ama sayfa tanımlanmamıştı ama kullanabiliyoruz. Bunun sebebi sayfa bir üst class olan Kitap clasında olduğu için.

Buda son Test clasımız:

Kod:
public class Test
{
	public static **** main (String[] args)
	{
		Sozluk trSozluk = new Sozluk();
		System.out.println ("Sayfa sayısı: " + trSozluk.getSayfa());
		System.out.println ("Kelime sayısı: " + trSozluk.getKelime());
		System.out.println ("Sayfa başı kelime oranı: " + trSozluk.oranHesapla());
	}
}

Tese clasında diğer claslara ait methodları çağırmak için trSozluk adında Sozluk objesi oluşturuyoruz ve onları trSozluk.getSayfa() , trSozluk.getKelime() ve trSozluk.oranHesapla() diyerek method isimleriyle çağırabiliyoruz. Sonuçta output(çıktı) böyle oluyor:

Sayfa sayısı: 25
Kelime sayısı: 150
Sayfa başı kelime oranı: 6.0

Eğer sorunuz varsa çekinmeyin
-----------------------------------------------------------------------------------------
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.