{"id":43818,"date":"2026-08-04T08:00:48","date_gmt":"2026-08-04T05:00:48","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=43818"},"modified":"2026-08-04T08:01:14","modified_gmt":"2026-08-04T05:01:14","slug":"javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/","title":{"rendered":"Java&#8217;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131"},"content":{"rendered":"<h2>Java&#8217;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131<\/h2>\n<p>Nesne Y\u00f6nelimli Programlama (OOP), modern yaz\u0131l\u0131m geli\u015ftirmenin temelini olu\u015fturan g\u00fc\u00e7l\u00fc bir paradigmad\u0131r. Bu paradigman\u0131n d\u00f6rt ana s\u00fctunu vard\u0131r: kaps\u00fclleme (encapsulation), soyutlama (abstraction), polimorfizm (polymorphism) ve kal\u0131t\u0131m (inheritance). Bu makalede, Java \u00f6zelinde kal\u0131t\u0131m kavram\u0131n\u0131 derinlemesine inceleyecek, temel prensiplerini, uygulama y\u00f6ntemlerini, avantajlar\u0131n\u0131 ve dezavantajlar\u0131n\u0131 detayl\u0131 \u00f6rneklerle a\u00e7\u0131klayaca\u011f\u0131z. Kal\u0131t\u0131m, kodun yeniden kullan\u0131labilirli\u011fini art\u0131rarak, yaz\u0131l\u0131m\u0131n daha esnek, bak\u0131m\u0131 kolay ve geni\u015fletilebilir olmas\u0131n\u0131 sa\u011flayan kritik bir mekanizmad\u0131r.<\/p>\n<h3>Kal\u0131t\u0131m Nedir? Temel Kavramlar<\/h3>\n<p>Kal\u0131t\u0131m, bir s\u0131n\u0131f\u0131n ba\u015fka bir s\u0131n\u0131f\u0131n \u00f6zelliklerini (alanlar\/field&#8217;lar) ve davran\u0131\u015flar\u0131n\u0131 (metotlar) miras almas\u0131n\u0131 sa\u011flayan bir OOP prensibidir. Bu, &#8220;bir \u015fey bir \u015feydir&#8221; (is-a) ili\u015fkisini temsil eder. \u00d6rne\u011fin, &#8220;K\u00f6pek bir Hayvand\u0131r&#8221; veya &#8220;Araba bir Ta\u015f\u0131tt\u0131r&#8221;. Kal\u0131t\u0131m sayesinde, daha genel bir s\u0131n\u0131f\u0131n (\u00fcst s\u0131n\u0131f) tan\u0131mlad\u0131\u011f\u0131 \u00f6zellikleri, daha \u00f6zel s\u0131n\u0131flar (alt s\u0131n\u0131flar) yeniden yazmak zorunda kalmadan kullanabilir ve kendi \u00f6zel \u00f6zelliklerini ekleyebilirler.<\/p>\n<h4>\u00dcst S\u0131n\u0131f (Superclass\/Parent Class)<\/h4>\n<p>\u00dcst s\u0131n\u0131f, \u00f6zelliklerini ve metotlar\u0131n\u0131 ba\u015fka s\u0131n\u0131flara miras b\u0131rakan s\u0131n\u0131ft\u0131r. Bu s\u0131n\u0131f, daha genel bir kavram\u0131 temsil eder ve alt s\u0131n\u0131flar\u0131n ortak davran\u0131\u015flar\u0131n\u0131 ve verilerini i\u00e7erir.<\/p>\n<h4>Alt S\u0131n\u0131f (Subclass\/Child Class)<\/h4>\n<p>Alt s\u0131n\u0131f, bir \u00fcst s\u0131n\u0131ftan \u00f6zellik ve metotlar\u0131 miras alan s\u0131n\u0131ft\u0131r. Alt s\u0131n\u0131f, \u00fcst s\u0131n\u0131f\u0131n t\u00fcm public ve protected \u00fcyelerine do\u011frudan eri\u015febilir. Kendi \u00f6zel \u00f6zelliklerini ve metotlar\u0131n\u0131 ekleyebilir veya \u00fcst s\u0131n\u0131f\u0131n metotlar\u0131n\u0131 ge\u00e7ersiz k\u0131labilir (override).<\/p>\n<h4><code>extends<\/code> Anahtar Kelimesi<\/h4>\n<p>Java&#8217;da bir s\u0131n\u0131f\u0131n ba\u015fka bir s\u0131n\u0131ftan miras alaca\u011f\u0131n\u0131 belirtmek i\u00e7in <code>extends<\/code> anahtar kelimesi kullan\u0131l\u0131r. \u00d6rne\u011fin: <code>class Kedi extends Hayvan { ... }<\/code>.<\/p>\n<h4><code>is-a<\/code> \u0130li\u015fkisi<\/h4>\n<p>Kal\u0131t\u0131m\u0131n temelini olu\u015fturan ili\u015fki t\u00fcr\u00fcd\u00fcr. Bir alt s\u0131n\u0131f\u0131n, \u00fcst s\u0131n\u0131f\u0131n bir t\u00fcr\u00fc oldu\u011funu ifade eder. \u00d6rne\u011fin, <code>M\u00fchendis<\/code> s\u0131n\u0131f\u0131 <code>\u00c7al\u0131\u015fan<\/code> s\u0131n\u0131f\u0131ndan miras al\u0131yorsa, &#8220;M\u00fchendis bir \u00c7al\u0131\u015fand\u0131r&#8221; diyebiliriz. Bu ili\u015fki, polimorfizm i\u00e7in de zemin haz\u0131rlar.<\/p>\n<h3>Java&#8217;da Kal\u0131t\u0131m\u0131n Temelleri<\/h3>\n<p>Java&#8217;da kal\u0131t\u0131m, tekli kal\u0131t\u0131m modelini destekler; yani bir s\u0131n\u0131f yaln\u0131zca tek bir \u00fcst s\u0131n\u0131ftan miras alabilir. Bu, \u00e7oklu kal\u0131t\u0131m\u0131n getirebilece\u011fi karma\u015f\u0131kl\u0131klar\u0131 ve &#8220;elmas problemi&#8221; gibi sorunlar\u0131 \u00f6nlemek i\u00e7indir. Ancak, aray\u00fczler (interfaces) arac\u0131l\u0131\u011f\u0131yla \u00e7oklu kal\u0131t\u0131ma benzer bir davran\u0131\u015f elde etmek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<h4>Basit Bir Kal\u0131t\u0131m \u00d6rne\u011fi<\/h4>\n<p>Bir <code>Hayvan<\/code> s\u0131n\u0131f\u0131 ve ondan t\u00fcreyen <code>K\u00f6pek<\/code> ve <code>Kedi<\/code> s\u0131n\u0131flar\u0131n\u0131 ele alal\u0131m:<\/p>\n<pre><code>\n\/\/ \u00dcst S\u0131n\u0131f (Superclass)\nclass Hayvan {\n    String isim;\n\n    public Hayvan(String isim) {\n        this.isim = isim;\n    }\n\n    public void yemekYe() {\n        System.out.println(isim + \" yemek yiyor.\");\n    }\n\n    public void sesCikar() {\n        System.out.println(isim + \" bir ses \u00e7\u0131kar\u0131yor.\");\n    }\n}\n\n\/\/ Alt S\u0131n\u0131f (Subclass)\nclass Kopek extends Hayvan {\n    public Kopek(String isim) {\n        super(isim); \/\/ \u00dcst s\u0131n\u0131f\u0131n yap\u0131c\u0131s\u0131n\u0131 \u00e7a\u011f\u0131r\u0131r\n    }\n\n    @Override\n    public void sesCikar() {\n        System.out.println(isim + \" havl\u0131yor.\");\n    }\n\n    public void kos() {\n        System.out.println(isim + \" ko\u015fuyor.\");\n    }\n}\n\n\/\/ Alt S\u0131n\u0131f (Subclass)\nclass Kedi extends Hayvan {\n    public Kedi(String isim) {\n        super(isim);\n    }\n\n    @Override\n    public void sesCikar() {\n        System.out.println(isim + \" miyavl\u0131yor.\");\n    }\n\n    public void tirman() {\n        System.out.println(isim + \" t\u0131rman\u0131yor.\");\n    }\n}\n\n\/\/ Ana metot (main method) ile kullan\u0131m\u0131\npublic class KalitimOrnegi {\n    public static void main(String[] args) {\n        Kopek kopek = new Kopek(\"Karaba\u015f\");\n        kopek.yemekYe(); \/\/ Hayvan s\u0131n\u0131f\u0131ndan miras al\u0131nd\u0131\n        kopek.sesCikar(); \/\/ Kopek s\u0131n\u0131f\u0131nda ge\u00e7ersiz k\u0131l\u0131nd\u0131\n        kopek.kos(); \/\/ Kopek s\u0131n\u0131f\u0131na \u00f6zg\u00fc metot\n\n        Kedi kedi = new Kedi(\"Pamuk\");\n        kedi.yemekYe(); \/\/ Hayvan s\u0131n\u0131f\u0131ndan miras al\u0131nd\u0131\n        kedi.sesCikar(); \/\/ Kedi s\u0131n\u0131f\u0131nda ge\u00e7ersiz k\u0131l\u0131nd\u0131\n        kedi.tirman(); \/\/ Kedi s\u0131n\u0131f\u0131na \u00f6zg\u00fc metot\n\n        Hayvan genelHayvan = new Hayvan(\"Genel Hayvan\");\n        genelHayvan.sesCikar(); \/\/ Hayvan s\u0131n\u0131f\u0131n\u0131n kendi metodu\n    }\n}\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>Kopek<\/code> ve <code>Kedi<\/code> s\u0131n\u0131flar\u0131 <code>Hayvan<\/code> s\u0131n\u0131f\u0131n\u0131n <code>yemekYe()<\/code> metotunu miras al\u0131r ve do\u011frudan kullanabilir. <code>sesCikar()<\/code> metotunu ise kendi t\u00fcrlerine \u00f6zg\u00fc sesleri \u00e7\u0131karmak i\u00e7in ge\u00e7ersiz k\u0131larlar. Ayr\u0131ca, her alt s\u0131n\u0131f\u0131n kendine \u00f6zg\u00fc metotlar\u0131 (<code>kos()<\/code> ve <code>tirman()<\/code>) bulunur.<\/p>\n<h4>\u00dcye Eri\u015fimi (Member Access)<\/h4>\n<p>Kal\u0131t\u0131m yoluyla miras al\u0131nan \u00fcyelere (alanlar ve metotlar) eri\u015fim, Java&#8217;daki eri\u015fim belirleyicileri (public, protected, default, private) taraf\u0131ndan kontrol edilir:<\/p>\n<p>*   <strong><code>public<\/code><\/strong>: \u00dcst s\u0131n\u0131f\u0131n <code>public<\/code> \u00fcyeleri, alt s\u0131n\u0131flar taraf\u0131ndan do\u011frudan eri\u015filebilir ve kullan\u0131labilir.<br \/>\n*   <strong><code>protected<\/code><\/strong>: \u00dcst s\u0131n\u0131f\u0131n <code>protected<\/code> \u00fcyeleri, ayn\u0131 paket i\u00e7indeki t\u00fcm s\u0131n\u0131flar ve farkl\u0131 paketlerdeki alt s\u0131n\u0131flar taraf\u0131ndan eri\u015filebilir. Bu, kal\u0131t\u0131m i\u00e7in ideal bir eri\u015fim seviyesidir.<br \/>\n*   <strong><code>default<\/code> (paket \u00f6zel)<\/strong>: \u00dcst s\u0131n\u0131f\u0131n <code>default<\/code> \u00fcyeleri, yaln\u0131zca ayn\u0131 paket i\u00e7indeki alt s\u0131n\u0131flar taraf\u0131ndan eri\u015filebilir. Farkl\u0131 paketlerdeki alt s\u0131n\u0131flar eri\u015femez.<br \/>\n*   <strong><code>private<\/code><\/strong>: \u00dcst s\u0131n\u0131f\u0131n <code>private<\/code> \u00fcyeleri, yaln\u0131zca kendi tan\u0131mland\u0131klar\u0131 s\u0131n\u0131f i\u00e7inde eri\u015filebilir. Alt s\u0131n\u0131flar taraf\u0131ndan do\u011frudan miras al\u0131namaz veya eri\u015filemezler. Ancak, alt s\u0131n\u0131flar \u00fcst s\u0131n\u0131f\u0131n <code>public<\/code> veya <code>protected<\/code> metotlar\u0131 arac\u0131l\u0131\u011f\u0131yla <code>private<\/code> \u00fcyelere dolayl\u0131 olarak eri\u015febilirler (getter\/setter metotlar\u0131 gibi).<\/p>\n<h4>Yap\u0131c\u0131 Metotlar (Constructors) ve <code>super()<\/code> Anahtar Kelimesi<\/h4>\n<p>Bir alt s\u0131n\u0131f nesnesi olu\u015fturuldu\u011funda, her zaman \u00f6nce \u00fcst s\u0131n\u0131f\u0131n yap\u0131c\u0131s\u0131 \u00e7a\u011fr\u0131l\u0131r. Java&#8217;da her s\u0131n\u0131f\u0131n varsay\u0131lan bir yap\u0131c\u0131s\u0131 vard\u0131r (e\u011fer siz bir tane tan\u0131mlamazsan\u0131z). Alt s\u0131n\u0131f\u0131n yap\u0131c\u0131s\u0131 i\u00e7inde, <code>super()<\/code> anahtar kelimesi kullan\u0131larak \u00fcst s\u0131n\u0131f\u0131n yap\u0131c\u0131s\u0131 a\u00e7\u0131k\u00e7a \u00e7a\u011fr\u0131labilir.<\/p>\n<p>*   <code>super()<\/code>: \u00dcst s\u0131n\u0131f\u0131n parametresiz yap\u0131c\u0131s\u0131n\u0131 \u00e7a\u011f\u0131r\u0131r.<br \/>\n*   <code>super(param1, param2, ...)<\/code>: \u00dcst s\u0131n\u0131f\u0131n belirli parametrelerle tan\u0131mlanm\u0131\u015f yap\u0131c\u0131s\u0131n\u0131 \u00e7a\u011f\u0131r\u0131r.<\/p>\n<p>E\u011fer alt s\u0131n\u0131f\u0131n yap\u0131c\u0131s\u0131 i\u00e7inde <code>super()<\/code> \u00e7a\u011fr\u0131s\u0131 yoksa, Java derleyicisi otomatik olarak ilk sat\u0131ra parametresiz <code>super()<\/code> \u00e7a\u011fr\u0131s\u0131 ekler. Bu nedenle, \u00fcst s\u0131n\u0131fta parametresiz bir yap\u0131c\u0131 yoksa ve yaln\u0131zca parametreli yap\u0131c\u0131lar varsa, alt s\u0131n\u0131f\u0131n yap\u0131c\u0131s\u0131nda \u00fcst s\u0131n\u0131f\u0131n uygun parametreli yap\u0131c\u0131s\u0131n\u0131 <code>super(...)<\/code> ile a\u00e7\u0131k\u00e7a \u00e7a\u011f\u0131rmak zorunludur.<\/p>\n<h4>Metot Ge\u00e7ersiz K\u0131lma (Method Overriding) ve <code>@Override<\/code><\/h4>\n<p>Metot ge\u00e7ersiz k\u0131lma, bir alt s\u0131n\u0131f\u0131n, \u00fcst s\u0131n\u0131f\u0131nda zaten tan\u0131mlanm\u0131\u015f olan bir metotun kendi \u00f6zel uygulamas\u0131n\u0131 sa\u011flamas\u0131d\u0131r. Ge\u00e7ersiz k\u0131l\u0131nan metot, \u00fcst s\u0131n\u0131ftaki metotla ayn\u0131 imzaya (metot ad\u0131, parametre listesi ve d\u00f6n\u00fc\u015f tipi) sahip olmal\u0131d\u0131r.<\/p>\n<p>*   <strong>\u0130mza<\/strong>: Metot ad\u0131 ve parametre listesi ayn\u0131 olmal\u0131d\u0131r. D\u00f6n\u00fc\u015f tipi de ayn\u0131 olmal\u0131 veya \u00fcst s\u0131n\u0131ftaki metotun d\u00f6n\u00fc\u015f tipinin bir alt tipi olmal\u0131d\u0131r (Java 5.0&#8217;dan itibaren covariant d\u00f6n\u00fc\u015f tipleri).<br \/>\n*   <strong>Eri\u015fim Belirleyici<\/strong>: Ge\u00e7ersiz k\u0131lan metot, ge\u00e7ersiz k\u0131l\u0131nan metotla ayn\u0131 veya daha geni\u015f bir eri\u015fim belirleyiciye sahip olmal\u0131d\u0131r (\u00f6rne\u011fin, <code>protected<\/code> bir metot <code>public<\/code> olarak ge\u00e7ersiz k\u0131l\u0131nabilir, ancak <code>public<\/code> bir metot <code>private<\/code> olarak ge\u00e7ersiz k\u0131l\u0131namaz).<br \/>\n*   <strong><code>@Override<\/code> Anotasyonu<\/strong>: Bu anotasyon, bir metotun \u00fcst s\u0131n\u0131ftaki bir metotu ge\u00e7ersiz k\u0131ld\u0131\u011f\u0131n\u0131 belirtmek i\u00e7in kullan\u0131l\u0131r. Derleyiciye bu konuda bilgi verir ve yanl\u0131\u015fl\u0131kla bir metotun ge\u00e7ersiz k\u0131l\u0131nmas\u0131n\u0131 engeller (\u00f6rne\u011fin, imza hatas\u0131 durumunda derleme hatas\u0131 verir). Kullan\u0131lmas\u0131 \u015fiddetle tavsiye edilir.<\/p>\n<h4><code>final<\/code> Anahtar Kelimesi<\/h4>\n<p><code>final<\/code> anahtar kelimesi, kal\u0131t\u0131m ba\u011flam\u0131nda \u00fc\u00e7 farkl\u0131 \u015fekilde kullan\u0131labilir:<\/p>\n<p>*   <strong><code>final<\/code> de\u011fi\u015fkenler<\/strong>: De\u011fi\u015fkenin de\u011feri bir kez atand\u0131ktan sonra de\u011fi\u015ftirilemez.<br \/>\n*   <strong><code>final<\/code> metotlar<\/strong>: Bir metot <code>final<\/code> olarak i\u015faretlenirse, alt s\u0131n\u0131flar bu metotu ge\u00e7ersiz k\u0131lamazlar. Bu, belirli bir davran\u0131\u015f\u0131n t\u00fcm alt s\u0131n\u0131flarda ayn\u0131 kalmas\u0131n\u0131 sa\u011flamak i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong><code>final<\/code> s\u0131n\u0131flar<\/strong>: Bir s\u0131n\u0131f <code>final<\/code> olarak i\u015faretlenirse, bu s\u0131n\u0131ftan ba\u015fka hi\u00e7bir s\u0131n\u0131f miras alamaz. Bu, bir s\u0131n\u0131f\u0131n davran\u0131\u015f\u0131n\u0131n de\u011fi\u015ftirilemez olmas\u0131n\u0131 veya g\u00fcvenlik nedeniyle geni\u015fletilmemesini sa\u011flamak i\u00e7in kullan\u0131l\u0131r (\u00f6rne\u011fin, <code>String<\/code> s\u0131n\u0131f\u0131 <code>final<\/code> bir s\u0131n\u0131ft\u0131r).<\/p>\n<h3>Kal\u0131t\u0131m T\u00fcrleri (Java&#8217;da Desteklenenler)<\/h3>\n<p>Java, tekli kal\u0131t\u0131m modelini desteklerken, bu temel \u00fczerine in\u015fa edilebilecek farkl\u0131 hiyerar\u015fik yap\u0131lar mevcuttur.<\/p>\n<h4>Tekli Kal\u0131t\u0131m (Single Inheritance)<\/h4>\n<p>Bir s\u0131n\u0131f\u0131n yaln\u0131zca tek bir \u00fcst s\u0131n\u0131ftan miras almas\u0131d\u0131r. Java&#8217;da do\u011frudan desteklenen tek s\u0131n\u0131f kal\u0131t\u0131m t\u00fcr\u00fcd\u00fcr.<\/p>\n<pre><code>\nclass A { \/<em> ... <\/em>\/ }\nclass B extends A { \/<em> ... <\/em>\/ } \/\/ B, A'dan miras al\u0131r\n<\/code><\/pre>\n<h4>\u00c7ok Seviyeli Kal\u0131t\u0131m (Multilevel Inheritance)<\/h4>\n<p>Bir s\u0131n\u0131f\u0131n ba\u015fka bir s\u0131n\u0131ftan miras almas\u0131 ve bu miras alan s\u0131n\u0131f\u0131n da ba\u015fka bir s\u0131n\u0131fa miras b\u0131rakmas\u0131d\u0131r. Bir zincirleme ili\u015fki olu\u015fturur.<\/p>\n<pre><code>\nclass A { \/<em> ... <\/em>\/ }\nclass B extends A { \/<em> ... <\/em>\/ } \/\/ B, A'dan miras al\u0131r\nclass C extends B { \/<em> ... <\/em>\/ } \/\/ C, B'den miras al\u0131r (dolay\u0131s\u0131yla A'dan da)\n<\/code><\/pre>\n<h4>Hiyerar\u015fik Kal\u0131t\u0131m (Hierarchical Inheritance)<\/h4>\n<p>Birden fazla alt s\u0131n\u0131f\u0131n ayn\u0131 tek bir \u00fcst s\u0131n\u0131ftan miras almas\u0131d\u0131r.<\/p>\n<pre><code>\nclass A { \/<em> ... <\/em>\/ }\nclass B extends A { \/<em> ... <\/em>\/ } \/\/ B, A'dan miras al\u0131r\nclass C extends A { \/<em> ... <\/em>\/ } \/\/ C, A'dan miras al\u0131r\n<\/code><\/pre>\n<h4>\u00c7oklu Kal\u0131t\u0131m (Multiple Inheritance) &#8211; Java&#8217;da Do\u011frudan Yok<\/h4>\n<p>Bir s\u0131n\u0131f\u0131n birden fazla \u00fcst s\u0131n\u0131ftan miras almas\u0131d\u0131r. Java, \u00e7oklu kal\u0131t\u0131m\u0131 do\u011frudan desteklemez. Bunun temel nedeni, farkl\u0131 \u00fcst s\u0131n\u0131flarda ayn\u0131 imzaya sahip metotlar oldu\u011funda hangi metotun \u00e7a\u011fr\u0131laca\u011f\u0131na dair belirsizlik (elmas problemi) ya\u015fanmas\u0131d\u0131r. Java bu sorunu aray\u00fczler (interfaces) arac\u0131l\u0131\u011f\u0131yla \u00e7\u00f6zer. Bir s\u0131n\u0131f birden fazla aray\u00fcz\u00fc <code>implements<\/code> edebilir ve bu aray\u00fczlerin metotlar\u0131n\u0131 kendi i\u00e7inde uygulayabilir.<\/p>\n<h3>Polimorfizm ve Kal\u0131t\u0131m<\/h3>\n<p>Polimorfizm, &#8220;\u00e7ok bi\u00e7imlilik&#8221; anlam\u0131na gelir ve nesne y\u00f6nelimli programlaman\u0131n en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biridir. Kal\u0131t\u0131m, polimorfizmin temelini olu\u015fturur. Java&#8217;da polimorfizm, bir nesnenin farkl\u0131 formlarda davranabilmesi anlam\u0131na gelir.<\/p>\n<h4>\u00c7al\u0131\u015fma Zaman\u0131 Polimorfizmi (Runtime Polymorphism) \/ Dinamik Metot \u00c7a\u011f\u0131rma<\/h4>\n<p>Bu, bir \u00fcst s\u0131n\u0131f referans de\u011fi\u015fkeninin, bir alt s\u0131n\u0131f nesnesini i\u015faret edebilmesi durumudur. \u00c7al\u0131\u015fma zaman\u0131nda, bu referans de\u011fi\u015fkeni \u00fczerinden \u00e7a\u011fr\u0131lan metot, asl\u0131nda nesnenin ger\u00e7ek t\u00fcr\u00fcne (alt s\u0131n\u0131f t\u00fcr\u00fcne) g\u00f6re belirlenir. Bu, metot ge\u00e7ersiz k\u0131lma (method overriding) ile m\u00fcmk\u00fcn olur.<\/p>\n<pre><code>\nclass Sekil {\n    public void ciz() {\n        System.out.println(\"\u015eekil \u00e7iziliyor.\");\n    }\n}\n\nclass Daire extends Sekil {\n    @Override\n    public void ciz() {\n        System.out.println(\"Daire \u00e7iziliyor.\");\n    }\n}\n\nclass Kare extends Sekil {\n    @Override\n    public void ciz() {\n        System.out.println(\"Kare \u00e7iziliyor.\");\n    }\n}\n\npublic class PolimorfizmOrnegi {\n    public static void main(String[] args) {\n        Sekil s1 = new Daire(); \/\/ Upcasting\n        Sekil s2 = new Kare();  \/\/ Upcasting\n        Sekil s3 = new Sekil();\n\n        s1.ciz(); \/\/ Daire \u00e7iziliyor.\n        s2.ciz(); \/\/ Kare \u00e7iziliyor.\n        s3.ciz(); \/\/ \u015eekil \u00e7iziliyor.\n    }\n}\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>Sekil<\/code> referans de\u011fi\u015fkenleri, <code>Daire<\/code> ve <code>Kare<\/code> nesnelerini i\u015faret etmektedir. <code>ciz()<\/code> metotu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, Java \u00e7al\u0131\u015fma zaman\u0131nda hangi metotun \u00e7a\u011fr\u0131laca\u011f\u0131na nesnenin ger\u00e7ek tipine bakarak karar verir.<\/p>\n<h4>Yukar\u0131 Y\u00f6nl\u00fc T\u00fcr D\u00f6n\u00fc\u015f\u00fcm\u00fc (Upcasting)<\/h4>\n<p>Bir alt s\u0131n\u0131f nesnesinin, bir \u00fcst s\u0131n\u0131f referans de\u011fi\u015fkenine atanmas\u0131d\u0131r. Bu i\u015flem otomatik olarak ve g\u00fcvenli bir \u015fekilde ger\u00e7ekle\u015fir. Yukar\u0131daki <code>Sekil s1 = new Daire();<\/code> \u00f6rne\u011fi bir upcasting \u00f6rne\u011fidir.<\/p>\n<h4>A\u015fa\u011f\u0131 Y\u00f6nl\u00fc T\u00fcr D\u00f6n\u00fc\u015f\u00fcm\u00fc (Downcasting) ve <code>instanceof<\/code> Operat\u00f6r\u00fc<\/h4>\n<p>Bir \u00fcst s\u0131n\u0131f referans de\u011fi\u015fkeninin, bir alt s\u0131n\u0131f nesnesine d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesidir. Bu i\u015flem g\u00fcvenli de\u011fildir ve <code>ClassCastException<\/code> hatas\u0131na yol a\u00e7abilir. Bu nedenle, downcasting yapmadan \u00f6nce <code>instanceof<\/code> operat\u00f6r\u00fc ile nesnenin ger\u00e7ek t\u00fcr\u00fcn\u00fcn kontrol edilmesi \u00f6nemlidir.<\/p>\n<pre><code>\n\/\/ ... (Sekil, Daire, Kare s\u0131n\u0131flar\u0131 yukar\u0131daki gibi)\n\npublic class DowncastingOrnegi {\n    public static void main(String[] args) {\n        Sekil s = new Daire(); \/\/ Upcasting\n\n        if (s instanceof Daire) {\n            Daire d = (Daire) s; \/\/ Downcasting\n            System.out.println(\"Ba\u015far\u0131l\u0131 downcasting: \" + d.getClass().getSimpleName());\n        }\n\n        Sekil s2 = new Kare();\n        \/\/ Daire d2 = (Daire) s2; \/\/ Bu sat\u0131r ClassCastException f\u0131rlat\u0131r!\n        \/\/ \u00c7\u00fcnk\u00fc s2 asl\u0131nda bir Kare nesnesini i\u015faret ediyor, Daire de\u011fil.\n    }\n}\n<\/code><\/pre>\n<h3>Soyut S\u0131n\u0131flar ve Metotlar (Abstract Classes and Methods)<\/h3>\n<p>Soyut s\u0131n\u0131flar ve metotlar, kal\u0131t\u0131m hiyerar\u015filerinde ortak bir aray\u00fcz tan\u0131mlamak ve baz\u0131 davran\u0131\u015flar\u0131n alt s\u0131n\u0131flar taraf\u0131ndan uygulanmas\u0131n\u0131 zorunlu k\u0131lmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4><code>abstract<\/code> Anahtar Kelimesi<\/h4>\n<p>*   <strong>Soyut Metot<\/strong>: Bir metot <code>abstract<\/code> olarak i\u015faretlenirse, bu metotun g\u00f6vdesi olmaz (yani uygulama kodu i\u00e7ermez). Sadece imzas\u0131 tan\u0131mlan\u0131r. Soyut metotlar, mutlaka alt s\u0131n\u0131flar taraf\u0131ndan ge\u00e7ersiz k\u0131l\u0131nmak zorundad\u0131r (aksi takdirde alt s\u0131n\u0131f da soyut olmak zorunda kal\u0131r).<br \/>\n*   <strong>Soyut S\u0131n\u0131f<\/strong>: Bir s\u0131n\u0131f en az bir soyut metot i\u00e7eriyorsa, s\u0131n\u0131f\u0131n kendisi de <code>abstract<\/code> olarak i\u015faretlenmelidir. Soyut s\u0131n\u0131flardan do\u011frudan nesne olu\u015fturulamaz. Yaln\u0131zca miras al\u0131nabilirler ve somut (concrete) alt s\u0131n\u0131flar\u0131 \u00fczerinden nesneleri olu\u015fturulabilir.<\/p>\n<pre><code>\nabstract class Calisan {\n    String ad;\n    String soyad;\n\n    public Calisan(String ad, String soyad) {\n        this.ad = ad;\n        this.soyad = soyad;\n    }\n\n    public void bilgileriGoster() {\n        System.out.println(\"Ad: \" + ad + \", Soyad: \" + soyad);\n    }\n\n    \/\/ Soyut metot: Maa\u015f hesaplama her \u00e7al\u0131\u015fan t\u00fcr\u00fc i\u00e7in farkl\u0131d\u0131r\n    public abstract double maasHesapla();\n}\n\nclass Muhendis extends Calisan {\n    double saatlikUcret;\n    int calismaSaati;\n\n    public Muhendis(String ad, String soyad, double saatlikUcret, int calismaSaati) {\n        super(ad, soyad);\n        this.saatlikUcret = saatlikUcret;\n        this.calismaSaati = calismaSaati;\n    }\n\n    @Override\n    public double maasHesapla() {\n        return saatlikUcret * calismaSaati;\n    }\n}\n\nclass Yonetici extends Calisan {\n    double aylikMaas;\n    double bonus;\n\n    public Yonetici(String ad, String soyad, double aylikMaas, double bonus) {\n        super(ad, soyad);\n        this.aylikMaas = aylikMaas;\n        this.bonus = bonus;\n    }\n\n    @Override\n    public double maasHesapla() {\n        return aylikMaas + bonus;\n    }\n}\n\npublic class SoyutSinifOrnegi {\n    public static void main(String[] args) {\n        \/\/ Calisan c = new Calisan(\"Ahmet\", \"Y\u0131lmaz\"); \/\/ Hata: Soyut s\u0131n\u0131ftan nesne olu\u015fturulamaz\n        \n        Muhendis m = new Muhendis(\"Ay\u015fe\", \"Demir\", 50.0, 160);\n        m.bilgileriGoster();\n        System.out.println(\"M\u00fchendis Maa\u015f\u0131: \" + m.maasHesapla());\n\n        Yonetici y = new Yonetici(\"Mehmet\", \"Can\", 10000.0, 2000.0);\n        y.bilgileriGoster();\n        System.out.println(\"Y\u00f6netici Maa\u015f\u0131: \" + y.maasHesapla());\n\n        \/\/ Polimorfizm ile soyut s\u0131n\u0131f kullan\u0131m\u0131\n        Calisan[] calisanlar = new Calisan[2];\n        calisanlar[0] = m;\n        calisanlar[1] = y;\n\n        for (Calisan c : calisanlar) {\n            System.out.println(c.ad + \" \" + c.soyad + \" toplam maa\u015f: \" + c.maasHesapla());\n        }\n    }\n}\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>Calisan<\/code> soyut s\u0131n\u0131f\u0131, t\u00fcm \u00e7al\u0131\u015fanlar i\u00e7in ortak olan <code>bilgileriGoster()<\/code> metotunu ve her alt s\u0131n\u0131f\u0131n kendi i\u00e7inde uygulamas\u0131 gereken <code>maasHesapla()<\/code> soyut metotunu tan\u0131mlar.<\/p>\n<h3>Aray\u00fczler ve Kal\u0131t\u0131m<\/h3>\n<p>Java&#8217;da aray\u00fczler (interfaces), bir s\u0131n\u0131f\u0131n ger\u00e7ekle\u015ftirmesi gereken bir davran\u0131\u015f s\u00f6zle\u015fmesi tan\u0131mlar. Aray\u00fczler, Java&#8217;da \u00e7oklu kal\u0131t\u0131m benzeri bir mekanizma sa\u011flamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4><code>interface<\/code> ve <code>implements<\/code> Anahtar Kelimeleri<\/h4>\n<p>*   <strong><code>interface<\/code><\/strong>: Bir aray\u00fcz tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r. Java 8 \u00f6ncesinde aray\u00fczler sadece soyut metotlar ve sabitler i\u00e7erebilirdi. Java 8&#8217;den itibaren <code>default<\/code> ve <code>static<\/code> metotlar\u0131 da i\u00e7erebilirler. Java 9&#8217;dan itibaren <code>private<\/code> metotlar da eklendi.<br \/>\n*   <strong><code>implements<\/code><\/strong>: Bir s\u0131n\u0131f\u0131n bir veya daha fazla aray\u00fcz\u00fc uygulayaca\u011f\u0131n\u0131 belirtmek i\u00e7in kullan\u0131l\u0131r. Bir s\u0131n\u0131f birden fazla aray\u00fcz\u00fc uygulayabilir, bu da Java&#8217;da \u00e7oklu kal\u0131t\u0131m\u0131n aray\u00fczler arac\u0131l\u0131\u011f\u0131yla nas\u0131l sa\u011fland\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<pre><code>\ninterface Ucurabilir {\n    void uc(); \/\/ Soyut metot\n    default void inisYap() { \/\/ Default metot (Java 8+)\n        System.out.println(\"G\u00fcvenli ini\u015f yap\u0131ld\u0131.\");\n    }\n}\n\ninterface Yuzebilir {\n    void yuz(); \/\/ Soyut metot\n}\n\nclass Ordek implements Ucurabilir, Yuzebilir {\n    @Override\n    public void uc() {\n        System.out.println(\"\u00d6rdek u\u00e7uyor.\");\n    }\n\n    @Override\n    public void yuz() {\n        System.out.println(\"\u00d6rdek y\u00fcz\u00fcyor.\");\n    }\n}\n\npublic class ArayuzOrnegi {\n    public static void main(String[] args) {\n        Ordek ordek = new Ordek();\n        ordek.uc();\n        ordek.yuz();\n        ordek.inisYap(); \/\/ Default metot \u00e7a\u011fr\u0131s\u0131\n    }\n}\n<\/code><\/pre>\n<p>Aray\u00fczler, <code>is-a<\/code> ili\u015fkisinden ziyade &#8220;yapabilir&#8221; (can-do) ili\u015fkisini temsil eder. Bir <code>Ordek<\/code>, hem <code>Ucurabilir<\/code> hem de <code>Yuzebilir<\/code>.<\/p>\n<h3>Kal\u0131t\u0131m\u0131n Avantajlar\u0131<\/h3>\n<p>Kal\u0131t\u0131m, yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecine bir\u00e7ok \u00f6nemli avantaj sa\u011flar:<\/p>\n<p>*   <strong>Kod Tekrar\u0131n\u0131 Azaltma (Code Reusability)<\/strong>: \u00dcst s\u0131n\u0131fta tan\u0131mlanan kodlar, alt s\u0131n\u0131flar taraf\u0131ndan yeniden kullan\u0131labilir. Bu, ayn\u0131 kodu birden fazla yere yazma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r, geli\u015ftirme s\u00fcresini k\u0131salt\u0131r ve hata olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r.<br \/>\n*   <strong>Bak\u0131m Kolayl\u0131\u011f\u0131 (Maintainability)<\/strong>: Ortak mant\u0131k \u00fcst s\u0131n\u0131fta merkezile\u015ftirildi\u011fi i\u00e7in, bir de\u011fi\u015fiklik yap\u0131lmas\u0131 gerekti\u011finde yaln\u0131zca tek bir yerde (\u00fcst s\u0131n\u0131fta) yap\u0131lmas\u0131 yeterlidir. Bu, kodun bak\u0131m\u0131n\u0131 ve g\u00fcncellenmesini kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Geni\u015fletilebilirlik (Extensibility)<\/strong>: Yeni \u00f6zellikler veya davran\u0131\u015flar eklemek gerekti\u011finde, mevcut kodda b\u00fcy\u00fck de\u011fi\u015fiklikler yapmadan yeni alt s\u0131n\u0131flar olu\u015fturularak sistem kolayca geni\u015fletilebilir.<br \/>\n*   <strong>Polimorfizm Sa\u011flama (Enabling Polymorphism)<\/strong>: Kal\u0131t\u0131m, polimorfizm i\u00e7in temel bir mekanizmad\u0131r. Bu sayede, genel bir \u00fcst s\u0131n\u0131f referans\u0131 kullanarak farkl\u0131 alt s\u0131n\u0131f nesnelerini i\u015fleyebiliriz. Bu, esnek ve dinamik kod yazmay\u0131 m\u00fcmk\u00fcn k\u0131lar.<br \/>\n*   <strong>Daha \u0130yi Organizasyon<\/strong>: S\u0131n\u0131flar aras\u0131nda mant\u0131ksal bir hiyerar\u015fi olu\u015fturarak kodu daha d\u00fczenli ve anla\u015f\u0131l\u0131r hale getirir.<\/p>\n<h3>Kal\u0131t\u0131m\u0131n Dezavantajlar\u0131 ve Ne Zaman Kullan\u0131lmal\u0131<\/h3>\n<p>Her ne kadar g\u00fc\u00e7l\u00fc bir ara\u00e7 olsa da, kal\u0131t\u0131m\u0131n baz\u0131 dezavantajlar\u0131 ve dikkat edilmesi gereken noktalar\u0131 vard\u0131r:<\/p>\n<p>*   <strong>S\u0131k\u0131 Ba\u011fl\u0131l\u0131k (Tight Coupling)<\/strong>: \u00dcst s\u0131n\u0131f ve alt s\u0131n\u0131f aras\u0131nda s\u0131k\u0131 bir ba\u011fl\u0131l\u0131k olu\u015fturur. \u00dcst s\u0131n\u0131fta yap\u0131lan bir de\u011fi\u015fiklik, t\u00fcm alt s\u0131n\u0131flar\u0131 etkileyebilir ve beklenmedik hatalara yol a\u00e7abilir.<br \/>\n*   <strong>Hiyerar\u015finin Karma\u015f\u0131kl\u0131\u011f\u0131 (Hierarchy Complexity)<\/strong>: \u00c7ok derin veya karma\u015f\u0131k kal\u0131t\u0131m hiyerar\u015fileri, kodun anla\u015f\u0131lmas\u0131n\u0131 ve hata ay\u0131klamas\u0131n\u0131 zorla\u015ft\u0131rabilir. &#8220;God class&#8221; (tanr\u0131 s\u0131n\u0131f\u0131) olarak bilinen, \u00e7ok fazla sorumlulu\u011fu olan \u00fcst s\u0131n\u0131flar olu\u015fabilir.<br \/>\n*   <strong>Yanl\u0131\u015f Kullan\u0131m Riskleri (Risks of Misuse)<\/strong>: Kal\u0131t\u0131m, her &#8220;is-a&#8221; ili\u015fkisi i\u00e7in uygun olmayabilir. \u00d6rne\u011fin, bir <code>Dikd\u00f6rtgen<\/code> s\u0131n\u0131f\u0131ndan <code>Kare<\/code> s\u0131n\u0131f\u0131n\u0131 t\u00fcretmek, <code>Kare<\/code>nin <code>Dikd\u00f6rtgen<\/code>in t\u00fcm \u00f6zelliklerine sahip olmas\u0131 gerekti\u011fi anlam\u0131na gelir. Ancak, <code>Kare<\/code>nin eni ve boyu e\u015fitken, <code>Dikd\u00f6rtgen<\/code> i\u00e7in bu durum zorunlu de\u011fildir. Bu t\u00fcr durumlarda, kal\u0131t\u0131m yerine kompozisyon (composition) daha uygun bir \u00e7\u00f6z\u00fcm olabilir.<br \/>\n*   <strong>Kaps\u00fcllemenin \u0130hlali<\/strong>: <code>protected<\/code> \u00fcyelerin kullan\u0131m\u0131, \u00fcst s\u0131n\u0131f\u0131n i\u00e7 detaylar\u0131n\u0131 alt s\u0131n\u0131flara a\u00e7arak kaps\u00fcllemeyi zay\u0131flatabilir.<\/p>\n<h4><code>has-a<\/code> (Kompozisyon) vs. <code>is-a<\/code> (Kal\u0131t\u0131m) \u0130li\u015fkisi<\/h4>\n<p>Kal\u0131t\u0131m, &#8220;is-a&#8221; (bir \u015fey bir \u015feydir) ili\u015fkisini temsil ederken, kompozisyon &#8220;has-a&#8221; (bir \u015feyin bir \u015feyi vard\u0131r) ili\u015fkisini temsil eder. Genellikle, bir s\u0131n\u0131f\u0131n ba\u015fka bir s\u0131n\u0131f\u0131n <em>davran\u0131\u015f\u0131n\u0131<\/em> kullanmas\u0131 gerekti\u011finde kompozisyon tercih edilirken, bir s\u0131n\u0131f\u0131n ba\u015fka bir s\u0131n\u0131f\u0131n <em>t\u00fcr\u00fc<\/em> olmas\u0131 gerekti\u011finde kal\u0131t\u0131m tercih edilir. &#8220;Tercih et kompozisyonu kal\u0131t\u0131ma kar\u015f\u0131&#8221; (favor composition over inheritance) prensibi, s\u0131k\u0131 ba\u011fl\u0131l\u0131\u011f\u0131 azaltmak ve daha esnek tasar\u0131mlar elde etmek i\u00e7in modern OOP tasar\u0131m\u0131nda s\u0131k\u00e7a vurgulan\u0131r. \u00d6rne\u011fin, bir <code>Araba<\/code> s\u0131n\u0131f\u0131 bir <code>Motor<\/code> s\u0131n\u0131f\u0131ndan miras almak yerine, bir <code>Motor<\/code> nesnesine sahip olabilir (<code>Araba has-a Motor<\/code>).<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Kal\u0131t\u0131m, Java&#8217;da ve genel olarak nesne y\u00f6nelimli programlamada g\u00fc\u00e7l\u00fc ve vazge\u00e7ilmez bir ara\u00e7t\u0131r. Kod tekrar\u0131n\u0131 azaltma, bak\u0131m\u0131 kolayla\u015ft\u0131rma, geni\u015fletilebilirlik sa\u011flama ve polimorfizmi m\u00fcmk\u00fcn k\u0131lma gibi \u00f6nemli avantajlar sunar. Ancak, do\u011fru bir \u015fekilde ve do\u011fru senaryolarda kullan\u0131lmas\u0131 kritik \u00f6neme sahiptir. S\u0131k\u0131 ba\u011fl\u0131l\u0131k, hiyerar\u015fi karma\u015f\u0131kl\u0131\u011f\u0131 ve yanl\u0131\u015f kullan\u0131m riskleri g\u00f6z \u00f6n\u00fcnde bulundurularak, &#8220;is-a&#8221; ili\u015fkisinin ger\u00e7ekten var olup olmad\u0131\u011f\u0131 iyi analiz edilmeli ve gerekti\u011finde kompozisyon gibi alternatif tasar\u0131m kal\u0131plar\u0131 tercih edilmelidir. Java&#8217;n\u0131n <code>extends<\/code> anahtar kelimesi, <code>super()<\/code> \u00e7a\u011fr\u0131lar\u0131, metot ge\u00e7ersiz k\u0131lma, soyut s\u0131n\u0131flar ve aray\u00fczler gibi mekanizmalar\u0131, geli\u015ftiricilere esnek ve sa\u011flam kal\u0131t\u0131m hiyerar\u015fileri olu\u015fturma imkan\u0131 sunar. Bu prensipleri do\u011fru bir \u015fekilde anlamak ve uygulamak, daha kaliteli, s\u00fcrd\u00fcr\u00fclebilir ve \u00f6l\u00e7eklenebilir Java uygulamalar\u0131 geli\u015ftirmek i\u00e7in temel bir ad\u0131md\u0131r.<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/java-basic-class-inheritance-example\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/java-basic-class-inheritance-example<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Java&#8217;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131 Nesne Y\u00f6nelimli Programlama (OOP), modern yaz\u0131l\u0131m geli\u015ftirmenin temelini olu\u015fturan g\u00fc\u00e7l\u00fc bir paradigmad\u0131r.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-43818","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java&#039;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java&#039;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131\" \/>\n<meta property=\"og:description\" content=\"Java&#039;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131 Nesne Y\u00f6nelimli Programlama (OOP), modern yaz\u0131l\u0131m geli\u015ftirmenin temelini olu\u015fturan g\u00fc\u00e7l\u00fc bir paradigmad\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-04T05:00:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-04T05:01:14+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Java&#8217;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131\",\"datePublished\":\"2026-08-04T05:00:48+00:00\",\"dateModified\":\"2026-08-04T05:01:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/\"},\"wordCount\":2817,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/\",\"name\":\"Java'da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-08-04T05:00:48+00:00\",\"dateModified\":\"2026-08-04T05:01:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java&#8217;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java'da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/","og_locale":"tr_TR","og_type":"article","og_title":"Java'da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131","og_description":"Java'da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131 Nesne Y\u00f6nelimli Programlama (OOP), modern yaz\u0131l\u0131m geli\u015ftirmenin temelini olu\u015fturan g\u00fc\u00e7l\u00fc bir paradigmad\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-08-04T05:00:48+00:00","article_modified_time":"2026-08-04T05:01:14+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Java&#8217;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131","datePublished":"2026-08-04T05:00:48+00:00","dateModified":"2026-08-04T05:01:14+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/"},"wordCount":2817,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/","url":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/","name":"Java'da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-08-04T05:00:48+00:00","dateModified":"2026-08-04T05:01:14+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javada-kalitim-nesne-yonelimli-programlamanin-temel-tasi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java&#8217;da Kal\u0131t\u0131m: Nesne Y\u00f6nelimli Programlaman\u0131n Temel Ta\u015f\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=43818"}],"version-history":[{"count":2,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43818\/revisions"}],"predecessor-version":[{"id":43820,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43818\/revisions\/43820"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=43818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=43818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=43818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}