← Back to list

Java Interitance (Kalıtım) ve Polymorphism (Polimorfizm)

Java’da Kalıtım (Inheritance) ve Polimorfizm (Polymorphism), nesne yönelimli programlamanın iki temel kavramıdır.

Berkay Derin · 2024-03-15 13:08 · 1 claps · 2.5 min read
Open on Medium ↗
Wiki topics: 🎮 · Gaming

Java Interitance (Kalıtım) ve Polymorphism (Polimorfizm)

Java’da Kalıtım (Inheritance) ve Polimorfizm (Polymorphism), nesne yönelimli programlamanın iki temel kavramıdır.

Bu kavramlar, kodun yeniden kullanılabilirliğini, düzenini ve genişletilebilirliğini artırarak daha etkin ve anlaşılır programlar yazmamıza olanak tanır.

Kalıtım (Inheritance)

Kalıtım, bir sınıfın başka bir sınıfın özelliklerini ve metodlarını miras almasını sağlar.

Java’da, bir sınıf yalnızca bir sınıftan miras alabilir (tekil kalıtım).

Bir sınıfın sadece bir extends’i olur.

public class Main {
  public static void main(String[] args){
    Customer customer = new Customer();
    Employee employee = new Employee();

    EmployeeManager employeeManager = new EmployeeManager();
    CustomerManager customerManager = new CustomerManager();


  }
}
public class Customer extends Person { // Customer, Person'dan miras alır
  String email;
}
public class Employee extends Person {
  double salary;
}
public class Person {
  int id;
  String firstName;
  String lastName;
  int age;
}
public class CustomerManager extends PersonManager {

}
public class EmployeeManager extends PersonManager {
  public void BestEmployee(){
    System.out.println("Ayın elemanı getirildi.")
  }
}
public class PersonManager {
  public void List(){
    System.out.println("Listelendi.");
  }

  public void Add(){
    System.out.println("Eklendi.");
  }


}

İLERİ SEVİYE INHERITANCE ÖRNEĞİ:

public class Main {
  public static void main(String[] args){
    KrediUI krediUI = new KrediUI();
    krediUI.KrediHesapla(new OgretmenKrediManager()); // output: Kredi hesaplandı
    krediUI.KrediHesapla(new AskerKrediManager()); 
  }
}
public class TarimKrediManager extends BaseKrediManager {

}
public class OgretmenKrediManager extends BaseKrediManager {
  OgretmenKrediManager ogretmenKrediManager = new OgretmenKrediManager();
  ogretmenKrediManager.Hesapla();
}
public class BaseKrediManager {
  public void Hesapla(){
    System.out.println("Kredi hesaplandı");
  }
}
public class KrediUI { // arayüzden çağrılan sınıf
  public void KrediHesapla(BaseKrediManager baseKrediManager){ // referens tiptir
    baseKrediManager.Hesapla();
  }
}

alttaki gibi yeni bir sınıf eklediğimizde kafamız rahat olur

public class AskerKrediManager extends BaseKrediManager {
  public void Hesapla(){
    System.out.println("Kredi hesaplandı");
  }
}

Polimorfizm (Polymorphism)

Polimorfizm, farklı sınıfların aynı arayüzü veya sınıfı farklı şekillerde uygulamasına olanak tanır. Bu sayede, farklı nesneler aynı arayüzden veya sınıftan türetilse bile farklı davranışlar sergileyebilir.

Polymorphism: Çok biçimlilik. Referans tipler arasında inheritance varsa polymophism gerçekleştirilir.

Main.java

public class Main {
  public static void main(String[] args){
    EmailLogger logger = new EmailLogger();
    logger.Log("Log mesajı"); //output: Default logger: Log mesajı

    BaseLogger[] loggers = new BaseLogger[]{new FileLogger(), new DatabaseLogger(), new ConsoleLogger()};
    for (BaseLogger logger:loggers){
      logger.log("Log mesajı"); // output: Logged to file: Log mesajı // Logged to database: Log mesajı, Logged to console: Log mesajı
    }

    CustomerManager customerManager = new CustomerManager(new DatabaseLogger()); // çok biçimlilik olduğu yer;
    customerManager.add(); // output: Müşteri eklendi // Logged to file: log mesajı
  }
}

BaseLogger.java

public class BaseLogger{ 
  public void log(String message){ 
   System.out.println("Default logger:" + message);
  }
}

DatabaseLogger.java

public class DataBaseLogger extends BaseLogger{ 
  public void log(String message){ // BaseLogger sınıfında bulunan metodu override ettik
   System.out.println("Logged to database:" + message);
  }
}

FileLogger.java

public class FileLogger extends BaseLogger{ 
  public void log(String message){ // BaseLogger sınıfında bulunan metodu override ettik
   System.out.println("Logged to file:" + message);
  }
}

EmailLogger.java

public class EmailLogger extends BaseLogger{ 
  public void log(String message){ // BaseLogger sınıfında bulunan metodu override ettik
   System.out.println("Logged to email:" + message);
  }
}

CustomerManager.java

public class CustomerManager {
  private BaseLogger logger;

  public CustomerManager(BaseLogger logger){
    this.logger = logger;
  }

  public void add(){
    System.out.println("Müşteri eklendi");
    this.logger.Log("log mesajı");

  }
}

ConsoleLogger.java

public class ConsoleLogger extends BaseLogger {
  public void log(String message){ 
   System.out.println("Logged to console:" + message);
  }
}

OVERRIDING: ÜZERİNE YAZMAK

Main.java

public class Main {
  public static void main(String[] args){
    BaseKrediManager[] krediManagers = new BaseKrediManager[]
        {new OgretmenKrediManager(), new TarimKrediManager(), new OgrenciKrediManager()};

    for (BaseKrediManager krediManager: krediManagers){
      Sysout(krediManager.hesapla(1000)); // output: 1180.0 // 1180.0 // 1100.0
    }
  }
}

BaseKrediManager.java

public class BaseKrediManager {
  public double hesapla(double tutar){
    return tutar * 1.18;
  }

}

TarimKrediManager.java

public class TarimKrediManager extends BaseKrediManager {

}

OgretmenKrediManager.java

public class OgretmenKrediManager extends BaseKrediManager {

}

OgrenciKrediManager.java

public class OgrenciKrediManager extends BaseKrediManager {
  public double hesapla(double tutar){
    return tutar * 1.10;
  }
}

ÖNEMLİ NOT:

Alttaki metotta final keywordu sayesinde başka bir sınıfta aynı metot ismiyle metot oluşturulduğunda hata verir yani izin vermez. Tekilliği sağlar.

public final double hesapla(double tutar){
    return tutar * 1.18;
  }

Kalıtım, kodun yeniden kullanılabilirliğini ve düzenini artırırken, polimorfizm farklı nesnelerin aynı arayüz veya sınıfı farklı şekillerde gerçekleştirmesine olanak tanıyarak kodun esnekliğini ve genişletilebilirliğini artırır.


메타데이터
post_id
4dc1e271f1eb
slug
java-interitance-ve-polymorphism-4dc1e271f1eb
url
https://medium.com/@Zewodi/java-interitance-ve-polymorphism-4dc1e271f1eb
canonical_url
https://medium.com/@Zewodi/java-interitance-ve-polymorphism-4dc1e271f1eb
author_url
https://medium.com/@Zewodi
status
ok
fetched_at
2026-07-24 06:21:58