16 Kasım 2015 Pazartesi

Java - Inheritance


Inheritance (miras alma, kalıtım), bir nesnenin özelliklerinin farklı nesneler tarafından da kullanılabilmesine olanak sağlayan Object Oriented Programming özelliğidir.
Yazılan bir sınıf bir başka sınıf tarafından miras alınabilir.
Bu işlem yapıldığı zaman temel alınan sınıfın tüm özellikleri yeni sınıfa aktarılır.

Superclass: Özellikleri kalıtım yoluyla diğer alt class’lara aktarılan class’tır.
Subclass: Superclass’ın özellikleri alan sınıftır.
Inheritance için extends anahtar sözcüğü kullanılır.

class Super{
.....
}

class Sub extends Super{
.....
}

  • Superclass içerisinde private olarak tanımlanan metodlar subclass tarafından inherit edilemez.
  • Superclass içerisinde tanımlanan bir metod subclass içerisinde override edilebilir.
  • Superclass içerisinde tanımlanan bir field, sublass içerisinde de tanımlanırsa bu field hiding edilir.
  • Subclass içerisinde farklı metodlar ve alanlar tanımlanabilir.
  • Superclass içerisinde tanımlanan static bir metod subclass içerisinde kullanılırsa hiding edilir.
  • Superclass içerisindeki bir metod veya field a super anahtar kelimesiyle erişilebilir.



Ø  Calculation superclasstır.


public class Calculation {

      int sonuc;

      public void addition(int x, int y) {
            sonuc = x + y;
            System.out.println("Toplam:" + sonuc);
      }

      public void Substraction(int x, int y) {
            sonuc = x - y;
            System.out.println("Fark:" + sonuc);
      }
}

Ø  My_Calculation subclasstır.

public class My_Calculation extends Calculation {

      public void carpma(int x, int y) {
            sonuc = x * y;
            System.out.println("Çarpım:" + sonuc);
      }

      @Override
      public void toplama(int x, int y) {
            sonuc = x + y;
            System.out.println("(Override method) Toplam:" + sonuc);
      }

      public void deneme() {

            toplama(10, 5);// bu classın methodunu çağırır
            this.toplama(10, 5);// bu classın methodunu çağırır
            super.toplama(10, 5);// superclass methodunu çağırır
            cikarma(10, 5);// superclass methodunu çağırır
            carpma(10, 5);// bu classın methodunu çağırır
      }
}

Ø  Test class

public class CalculationTest {

      public static void main(String[] args) {

            My_Calculation test = new My_Calculation();

            test.deneme();
      }
}


 Çıktı:

(Override method) Toplam:15
(Override method) Toplam:15
Toplam:15
Fark:5

Çarpım:50

15 Kasım 2015 Pazar

Class ve Object Kavramları Nedir?

Objeyi ifade etmeye çalışırsak etrafımızdaki her şeye bir obje diyebiliriz.
Örnek: Kalem, kedi, televizyon

Objeler iki karaktere sahiptirler: 
  • State
  • Behaviour 

Örnek üzerinden devam edersek bir bisikletin state’leri; tekerlek, pedal , direksiyon , vites...
Bisikletin behaviour’ları ise; pedalı çevirmek, direksiyonu yönlendirmek, vites değiştirmek olabilir.

Class bir objenin şablon halidir. Bellekte bir class için bellekte oluşan instance’a object denir. 



11 Kasım 2015 Çarşamba

Java – Access Control

Access control ile class içerisindeki metod ve alanların erişilebilirliğini(visibility) belirlenir.




private : 
  • Class içerisindeki Metod ve field için tanımlanabilir.  
  • Bir metod için tanımlanırsa metod a yalnız class içerisinden erişilir.
  • Bir field için tanımlanırsa field a yalnız class içerisinden erişilebilir. 


public  : 
  • Class, metod ve field için tanımlanabilir.    
  • Bir metod için tanımlanırsa metoda farklı  paket içerisindeki class lardan dahi  erişilebilir.         
  • Bir class için tanımlanırsa farklı paket içerisindeki class lardan dahi  erişilebilir.         
  • Bir field için tanımlanırsa farklı  paket içerisindeki class lardan dahi  erişilebilir.


protected :          
  • Metod ve field için tanımlanabilir.        
  • Bir metod için tanımlanırsa farklı paketlerdeki sınıflardan erişilemez. Eğer inherit eden sınıf farklı bir paket altındaysa bu defa metod erişilebilir.
  • Bir field için tanımlanırsa farklı paketlerdeki sınıflar dışından erişilemez. Eğer inherit eden sınıf farklı bir paket altındaysa bu defa field erişilebilir.


default : 
  • Bir class için tanımlanırsa package access olarak da nitelendirilebilir. Aynı paket içerisindeki sınıflar tarafından çağrılabilir.       
  • Bir metod için tanımlanıyorsa aynı paket içerisindeki sınıflar tarafından çağrılabilir. Paket dısarısında bir class  inherit etse dahi çağıramaz.     
  • Bir field  için tanımlanıyorsa aynı paket içerisindeki sınıflar tarafından çağrılabilir. Paket dısarısında bir class  inherit etse dahi çağıramaz.


10 Kasım 2015 Salı

Method Override & Method Overload

Java – Method Override

Superclass içerisinde tanımlanan bir method, extend edildiği subclass içerisinde tekrardan tanımlanması method override denir.

Vehicle superclassdır.

public class Vehicle {

      void run() {

            System.out.println("Vehicle is running");
      }
}

Bike subclasstır ve Vehicle classını extend eder sonra run() methodunu tekrardan tanımlar.

public class Bike extends Vehicle {

      @Override
      void run() {

            System.out.println("Bike is running");
      }
}


Java – Method Overload

Aynı class içerisinde farklı parametre sayısı ve farklı parametre tipleri method tanımlamaya method overload denir.
public class Overload {

      void foo(int a, int b) { 
            System.out.println(a + b);
      }

      void foo(String a, String b) { 
            System.out.println(a + " " + b);
      }

      void foo(int i, String s, double d) { 
            System.out.println(" ");
      }
}

Aşağıdaki gibi aynı sayıda ve tipte parametre girilirse hatalı olur.

public class Overload {

      void foo(int a, int b) { 
            System.out.println(a + b);
      }

      void foo(int x, int y) { 
            System.out.println(" ");
      }
}


Java – Encapsulation


Encapsulation kavramının genel mantığı field ve methodları bir class içerisinde sunmasıdır.
Encapsulation’da bir class’ın değişkenlerine (variables) diğer classlar tarafından doğrudan erişilemez ve sadece o sınıfın methodları aracılığı ile erişilebilir.
Encapsulation için;
·         Class’ın değişkenleri private olarak tanımlanır.
·         Değişkenlere diğer classlardan erişebilmek ve güncelleyebilmek için setter ve getter methodları oluşturulur.

Örnek bir Kisi classı oluşturalım:

public class Kisi {

      private String ad;
      private String soyad;
      private int id;

      public String getAd() {
            return ad;
      }

      public void setAd(String ad) {
            this.ad = ad;
      }

      public String getSoyad() {
            return soyad;
      }

      public void setSoyad(String soyad) {
            this.soyad = soyad;
      }

      public int getId() {
            return id;
      }

      public void setId(int id) {
            this.id = id;
      }
}

Kisi classındaki ad, soyad ve id değişkenlerine başka classlardan erişebilmek, değiştirebilmek için public setXXX() ve getXXX() methodları kullanılır.

Kisi classı değişkenlerine aşağıdaki gibi erişilip, değiştirilebilir.

public class EncapsulationTest {

      public static void main(String args[]) {

            Kisi testKisi = new Kisi();

            testKisi.setAd("Busra");
            testKisi.setSoyad("Aktas");
            testKisi.setId(123);

            System.out.println("Ad: " + testKisi.getAd());
            System.out.println("Soyad: " + testKisi.getSoyad());
            System.out.println("Id: " + testKisi.getId());
      }
}

Çıktı:
Ad: Busra
Soyad: Aktas
Id: 123

Encapsulation sayesinde verilerin daha tutarlı olmasını sağlayabiliriz.