Java - Interface & Abstract Örneği #2

Perşembe, Mayıs 14, 2015 kustemura 0 Yorum

Bir önceki örneğe buradan ulaşabilirsiniz.
Bu örneğe GitHub üzerinden erişebilirsiniz.
GitHub - InterfaceAbstractExampleTwo


package com.blogger_project;

/**
 * @Author : Ali Can Kuştemur
 * @Date : 14 May 2015
 * @File_Name : Animal.java
 * @Blog : http://kustemura.blogspot.com.tr
 */
interface BasicAnimals {
 String talk();

 void sit();

 void run();

 void features();
}

abstract class Animal implements BasicAnimals {
 private String name;
 private double height;
 private double weight;
 private String color;
 private String eyeColor;

 @Override
 abstract public String talk();

 protected Animal(final String name, final double height,
   final double weight, final String color, final String eyeColor) {
  setName(name);
  setHeight(height);
  setWeight(weight);
  setColor(eyeColor);
  setEyeColor(eyeColor);
 }

 protected Animal() {
  setName("İsimsiz bir hayvan");
  setHeight(-1);
  setWeight(-1);
  setColor("Siyah");
  setEyeColor("Siyah");
 }

 @Override
 public void sit() {
  System.out.println(" Oturuyorum !");
 }

 @Override
 public void run() {
  System.out.println(" Koşuyorum !");
 }

 @Override
 public void features() {
  System.out.println(" Adı :" + getName());
  System.out.println(" Boyu :" + getHeight() + " cm");
  System.out.println(" Ağırlığı :" + getWeight() + " kg");
  System.out.println(" Rengi :" + getColor());
  System.out.println(" Göz Rengi :" + getEyeColor());
 }

 public String getName() {
  return name;
 }

 public void setName(final String name) {
  this.name = name;
 }

 public double getHeight() {
  return height;
 }

 public void setHeight(final double height) {
  this.height = height;
 }

 public double getWeight() {
  return weight;
 }

 public void setWeight(final double weight) {
  this.weight = weight;
 }

 public String getColor() {
  return color;
 }

 public void setColor(final String color) {
  this.color = color;
 }

 public String getEyeColor() {
  return eyeColor;
 }

 public void setEyeColor(final String eyeColor) {
  this.eyeColor = eyeColor;
 }

}

class Dog extends Animal {
 Dog(final String name, final double height, final double weight,
   final String color, final String eyeColor) {
  super(name, height, weight, color, eyeColor);
 }

 Dog() {
  super();
 }

 @Override
 public String talk() {
  return " Hav Hav!";
 }
}

class Cat extends Animal {
 Cat(final String name, final double height, final double weight,
   final String color, final String eyeColor) {
  super(name, height, weight, color, eyeColor);
 }

 Cat() {
  super();
 }

 @Override
 public String talk() {
  return " Miyav Miyav";
 }
}

class AnimalDemo {
 public static void main(final String args[]) {
  final BasicAnimals myDog = new Dog("Karabaş", 45, 25, "Beyaz",
    "Kahverengi");
  myDog.features();
  myDog.sit();
  myDog.run();
  System.out.println(myDog.talk());

  System.out.println();

  final BasicAnimals myCat = new Cat("Minnoş", 20, 3, " Gri ", " Yeşil");
  myCat.features();
  myCat.sit();
  myCat.run();
  System.out.println(myCat.talk());

  System.out.println();

  final BasicAnimals dog = new Dog();
  dog.features();
  dog.sit();
  dog.run();
  System.out.println(dog.talk());
 }
}
Programın Çıktısı : 
 Adı :Karabaş
 Boyu :45.0 cm
 Ağırlığı :25.0 kg
 Rengi :Beyaz
 Göz Rengi :Kahverengi
 Oturuyorum !
 Koşuyorum !
 Hav Hav!

 Adı :Minnoş
 Boyu :20.0 cm
 Ağırlığı :3.0 kg
 Rengi : Gri 
 Göz Rengi : Yeşil
 Oturuyorum !
 Koşuyorum !
 Miyav Miyav

 Adı :İsimsiz bir hayvan
 Boyu :-1.0 cm
 Ağırlığı :-1.0 kg
 Rengi :Siyah
 Göz Rengi :Siyah
 Oturuyorum !
 Koşuyorum !
 Hav Hav!
BasicAnimals interface'i ile bir Hayvan örneği üzerinden çalışıyoruz.Temel hayvanların , temel özellikleri asla değişmeyeceğinden bunların birkaçını BasicAnimals'da topluyoruz.Ardından oluşturduğumuz tüm hayvanlar bu özellikleri zaten içermek zorunda.
Animals sınıfında tanımladığımız değişkenlerin private olarak tanımlandığına dikkat edin.Bu değişkenlere sadece get ve set methodları ile erişilebilir.Buradaki kavram Object-Oriented Programming'te Encapsulation (Kapsülleme) olarak adlandırılır.

BasicAnimals interface'i sayesinde alt sınıflara implement edeceğimiz methodları oluşturduk.Animals sınıfına BasicAnimals interface'ini implement ediyoruz.Oluşturduğumuz Animals soyut sınıfı , BasicAnimals'ın tüm özelliklerini aynı şekilde uygulamak zorundadır.sit() , run() ve features() methodları tüm hayvanlar için aynı şeyi ifade ettiğinden Animals sınıfı içerisinde methodlarımızı oluşturup oluşturduğumuz nesneler üzerinden bunlara erişebiliriz.Ancak her hayvanın konuşması kendine özgü bir yapıya sahip olduğu için diğer hayvanlardan bağımsız olmalıdır.Bu yüzden talk() methodunu soyut olarak tanımlıyoruz.Her sınıf kendi içerisinde talk() methodunu farklı biçimlerde işleyecektir.Animals sınıfından genişlettiğimiz Dog ve Cat sınıflarında görüldüğü gibi tüm sit() , run() ve features() methodları aynı yere çağrı yaparken , talk() methodu birbirinden bağımsız bir şekilde çağrılıyor.Bu kavram Object-Oriented Programming'te Polimorfizm(Çok Biçimlilik) olarak adlandırılır.

0 yorum :