Başlangıç > üçüncüYıl, Bilmuh, ikinciYıl, Java, Programlama > Inheritance & Polymorphism

Inheritance & Polymorphism


Inheritance(kalıtım),  var olan bir sınıftan geliştirme ya da uyarlama yaparak yeni bir sınıf türetmek için kullanılır.Alt sınıf(subclass) ve ust sınıf(super sınıf) kavramları vardır.

Polymorphism(çok biçimlilik), bir sınıf hiyerarşisinde aynı üst sınıfa bağlı olan farklı sınıfların nesnelerinin üst sınıf tipinde tanımlanarak işlem görmesini sağlamaktadır.Ust sınıfta tanımlanan metodun, alt sınıflarda farklı işlemler yapmasıdır.

Bu kavramlarla ilgili aşağıda yer alan programda,

“Sekil” isimli bir Soyut Sınıf yer almaktadır. Bu soyut sınıfta, çevre ve alan hesaplama metotları desteklenmektedir. Kare, Dikdörtgen ve Daire sınıfları bu soyut sınıftan türetilecektir. Bu sınıf aynı zamanda Cloneable verilerini kalıtımla alır ve abstract olarak iki metot bulundurur.Bunlar alt sınıflarında gerçekleştirilerek, farklı sınıflar içinde aynı metotların farklı işlemesi sağlanacaktır.
“Kare” sınıfı veri olarak, sol  üst köşenin koordinatları ve kenar uzunluğunu içermektedir. Koordinat sistemindeki noktaları temsil etmek için “Nokta” isimli bir sınıf kullanılmaktadır.


“Dikdortgen” sınıfıveri olarak, sol üst köşenin koordinatları, en ve boy içermektedir.
“Daire” sınıfı veri olarak merkezin koordinatları ve yarıçap tutmaktadır.
Farklı  şekil nesneleri oluşturan, bu nesneleri dizide (array) saklamakta ve bu nesnelerin  polimorfik kullanımlarını örneklemektedir.
Şekiller hiyerarşisindeki sınıflar (Nokta sınıfı dahil) için  toString,  equals ve clone metotları yer almaktadır.

Programı indirmek için tıklayın.

Sekil sınıfı:

public abstract class Sekil implements Cloneable{
private String isim;
private double alan;
Nokta nokta=new Nokta();

/* constructor method */
public Sekil() {
this.isim = “herhangi bir sekil”;
this.alan = -1;
}
public double getAlan() {
return alan;
}
public String getIsim() {
return this.isim;
}
public void isimBelirle(String yeni) {
this.isim = yeni;
}
public void setAlan(double alan) {
this.alan = alan;
}
public boolean equals(Sekil gecici) {
return this.equals(gecici);
}

public abstract String alanhesapla();
public abstract String toString();

}

Kare sınıfı:

public class Kare extends Sekil {
private int kenar;

/* constructor method */
public Kare(int x, int y, int kenar) {
isimBelirle(“kare”);
nokta.setX(x);
nokta.setY(y);
this.kenar = kenar;
}

public String alanhesapla() {
return ” alani:” + (kenar * kenar);
}

public String toString() {
return ” “ + “x=” + nokta.getX() + ” “ + “y=” +nokta.getY()+ ” kenari:” + kenar
+ alanhesapla();
}

@Override
protected Sekil clone() throws CloneNotSupportedException {
Kare clone=(Kare)super.clone();
// make the shallow copy of the object of type Department
clone.nokta=(Nokta)nokta.clone();
return clone;
}
}

Nokta sınıfı:

public class Nokta implements Cloneable {
private int x,y;

public void setY(int y) {
this.y = y;
}

public int getY() {
return y;
}

public void setX(int x) {
this.x = x;
}

public int getX() {
return x;
}
public Object clone() {
Nokta clone=new Nokta();
try {
clone = (Nokta)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
}

Dikdortgen sınıfı:

public class Dikdortgen extends Sekil {
public int en, boy;

/* constructor method */
public Dikdortgen(int x, int y, int en, int boy) {
isimBelirle(“dikdortgen”);
nokta.setX(x);
nokta.setY(y);
this.en = en;
this.boy = boy;
}

public String alanhesapla() {
return ” alani:” + (this.en * this.boy);
}

public String toString() {
return ” “ + “x=” +nokta.getX() + ” “ + “y=” + nokta.getY() + ” eni:” + en + “boyu:”
+ boy + alanhesapla();
}
@Override
protected Sekil clone() throws CloneNotSupportedException {
Dikdortgen clone=(Dikdortgen)super.clone();
// make the shallow copy of the object of type Department
clone.nokta=(Nokta)nokta.clone();
return clone;
}
}

Daire sınıfı:
public class Daire extends Sekil {

private int yaricap;
private double PI = Math.PI;

/* constructor method */
public Daire(int x, int y, int yaricap) {
isimBelirle(“daire”);
nokta.setX(x);
nokta.setY(y);
this.yaricap = yaricap;
}

public String alanhesapla() {
return ” alani:” + (this.PI * (yaricap * yaricap));
}

public String toString() {
return ” “ + “x=” + nokta.getX()+ ” “ + “y=” + nokta.getY() + ” yaricapi:” + yaricap
+ alanhesapla();
}
@Override
protected Sekil clone() throws CloneNotSupportedException {
Daire clone=(Daire)super.clone();
// make the shallow copy of the object of type Department
clone.nokta=(Nokta)nokta.clone();
return clone;
}

}

Main sınıfı:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {

public static Sekil[] BubbleSort(Sekil[] sekil, int index) {
int out, in;
for (out = index – 1; out > 1; out–)
// outer loop (backward)
for (in = 0; in < out; in++)
// inner loop (forward)
if (sekil[in].getAlan() > sekil[in + 1].getAlan())
// out of
// order?
swap(in, in + 1, sekil); // swap them
return sekil;
} // end bubbleSort()

// ————————————————————–
private static void swap(int one, int two, Sekil[] sekil) {
Sekil gecici = sekil[one];
sekil[one] = sekil[two];
sekil[two] = gecici;
}
public static void main(String[] args) throws CloneNotSupportedException {
BufferedReader input = null;
String fileName = null;
Sekil[] sekil = new Sekil[100];
int index = 0;
System.out.println(“Veri okunacak dosyanin adini girin.:”);
Scanner str = new Scanner(System.in);
fileName = str.next();
try {
// her okumada tek satir okuyacak sekilde
// kullanabilecegimiz yapi
input = new BufferedReader(new FileReader(fileName));
String line = null; // while dongusu icinde
// tanimlamiyoruz
while ((line = input.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, ” “);
if (st.nextToken().compareTo(“Kare”) == 0) {
int x = 0, y = 0, kenar = 0;
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
kenar = Integer.parseInt(st.nextToken());
Kare kare = new Kare(x, y, kenar);
sekil[index] = kare;
sekil[index].setAlan(kenar * kenar);
index++;
} else if (line.contains(“Dikdortgen”) == true) {
int x = 0, y = 0, en = 0, boy = 0;
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
en = Integer.parseInt(st.nextToken());
boy = Integer.parseInt(st.nextToken());
Dikdortgen dikdortgen = new Dikdortgen(x, y, en, boy);
dikdortgen.alanhesapla();
sekil[index] = dikdortgen;
sekil[index].setAlan(en * boy);
index++;
} else if (line.contains(“Daire”) == true) {
int yaricap = 0, x = 0, y = 0;
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
yaricap = Integer.parseInt(st.nextToken());
Daire daire = new Daire(x, y, yaricap);
daire.alanhesapla();
sekil[index] = daire;
sekil[index].setAlan(Math.PI * (yaricap * yaricap));
index++;
}
}

sekil = BubbleSort(sekil, index);
System.out
.println(“******************  Sekil   Bilgileri ****************”);
System.out
.println(“******************************************************”);
for (int i = 0; i < index; i++)
System.out.println(i + 1 + “) ” + sekil[i].getIsim() + ” “
+ sekil[i].toString());

} catch (final FileNotFoundException ex) {
// Dosya bulunamadi hatasi
// Bir hata olusursa ekrana yaziyoruz
ex.printStackTrace();
} catch (final IOException ex) {
// Herhangi bir I/O hatasi
// Bir hata olusursa ekrana yaziyoruz
ex.printStackTrace();
} finally {
try {
if (input != null) {
// actigimiz dosyayi kapatmaliyiz
input.close();
}
} catch (final IOException ex) {
// Bir hata olusursa ekrana yaziyoruz
ex.printStackTrace();
}
}
}
}

Bunlar da ilginizi çekebilir:

Bubble Sort (Kabarcık sıralama)

Kuyruk(Queue)

Yığıt (Stack)

Program Denetim Yapıları

Java’da Operatörler

Sarmalayıcı (Wrapper) Sınıflar

  1. Fatih
    Ekim 19, 2013, 2:38 am

    Güzel örnek elinize sağlık

  1. Aralık 3, 2010, 11:52 pm
  2. Aralık 3, 2010, 11:57 pm
  3. Aralık 3, 2010, 11:59 pm
  4. Aralık 3, 2010, 11:59 pm
  5. Aralık 11, 2010, 7:07 pm
  6. Aralık 18, 2010, 3:47 pm

Fatih için bir cevap yazın Cevabı iptal et