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.
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