Polymorphisim, instanceof

Kategori: Java , 08 Temmuz 2019 , JanFranco


Polymorphisim, çok biçimlilik anlamına gelmektedir. Bir sınıfın başka bir sınıf gibi davranma olayları örnek verilebilir. Direk örnek üzerinden görelim. Dog, Bird, Cat sınıfları ve bu sınıfların miras aldığı bir Animal sınıfı yazalım:


public class Animal {

	private String name;
	private int legCount;
	
	public Animal(String name, int legCount) {
		this.name = name;
		this.legCount = legCount;
	}
	
	public void speak() {
		System.out.println("I am a animal!");
	}
	
}

public class Bird extends Animal{

	public Bird(String name, int legCount) {
		super(name, legCount);
		// TODO Auto-generated constructor stub
	}
	
	public void speak() {
		System.out.println("I am a bird!");
	}
	
}

public class Dog extends Animal {

	public Dog(String name, int legCount) {
		super(name, legCount);
		// TODO Auto-generated constructor stub
	}

	public void speak() {
		System.out.println("I am a dog!");
	}
	
}

public class Cat extends Animal{
	
	public Cat(String name, int legCount) {
		super(name, legCount);
		// TODO Auto-generated constructor stub
	}

	public void speak() {
		System.out.println("I am a cat!");
	}
	
}
Main methodumuzda bu sınıfları kullanarak Polymorphisim kavramını anlamaya çalışacağız. Örneğe geçmeden önce instanceof kavramından bahsedeceğiz. instanceof kavramı bir objenin bir sınıftan türeyip türemediğini anlayabilir. Örneğin Dog sınıfından dog adında bir obje üretip if(dog instanceof Dog){**} şeklinde bir kullanım yaparsak ** yazdığımız yerdeki kodlar çalışır. Çünkü dog objesi Dog classından türetilmiştir. Örneğimize dönelim:

public class Main_class {
	
	public static void speak(Animal animal) {
		animal.speak();
	}
	
	public static void speak_2(Object object) {
		if(object instanceof Animal) {
			Animal animal = (Animal) object;
			animal.speak();
		}
		else if(object instanceof Bird) {
			Bird bird = (Bird) object;
			bird.speak();
		}
		else if(object instanceof Dog) {
			Dog dog = (Dog) object;
			dog.speak();
		}
		else if(object instanceof Cat) {
			Cat cat = (Cat) object;
			cat.speak();
		}
	}
	
	public static void main(String args[]) {
				
		speak(new Bird("MyBird", 2));
		speak(new Dog("MyDog", 4));
		speak(new Cat("MyCat", 4));
		speak(new Animal("MyAnimal", 12));
		
		Animal animal = new Animal("MyAnimal", 12);
		Bird bird = new Bird("MyBird", 2);
		Dog dog = new Dog("MyDog", 4);
		Cat cat = new Cat("MyCat", 4);
		
		speak_2(animal);
		speak_2(bird);
		speak_2(dog);
		speak_2(cat);
	}
	
}
>>

I am a bird!
I am a dog!
I am a cat!
I am a animal!
I am a animal!
I am a bird!
I am a dog!
I am a cat!
Burada iki fonksiyon kullandık: speak ve speak_2. speak fonksiyonu parametre olarak Animal classından oluşturulmuş bir obje alır. Biz de bu fonksiyona objeler göndererek kullanabiliriz. Hangi objeyi gönderirsek gönderelim fark etmez, her türlü o objenin speak methodu çalışacaktır. İşte polymorphisim kavramını bu şekilde görmüş olduk. Bir başka uygulama ise speak_2 fonksiyonudur. speak_2 fonksiyonu parametre olarak Object sınıfından bir obje alır. Object sınıfı Javada tüm classların miras aldığı bir sınıftır. Animal, Dog, Cat, Bird sınıflarından obje oluşturup bu fonksiyona gönderdiğimizde object.speak() şeklinde bir method olmadığından instanceof anahtar kelimesi ile gönderilen objenin ne tipte bir sınıftan oluşturulduğunu tespit etmemiz gerekir. Tespitlere göre objeyi o sınıftan bir objeymiş gibi gösterip speak methodunu kullanabiliriz.


Sonraki Yazı: Kart Oyunu
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın