# Ãok Biçimlilik (Polymorphism) Ãok biçimlilik aynı görevin veya iÅin farklı yollarla yapılabilmesini ifade eder. Nesne, aynı davranıÅı farklı formlar ve görünüÅler ile yerine getirebilir. Bunu yapabilmek için iki yöntem vardır. 1. Overriding in Java (Ezme) 2. Overloading in Java (AÅırı yükleme) ## AÅırı Yükleme (Overloading) ````java public class Sum { // aÅırı yüklenmiÅ sum() fonksiyonu // metod ismi aynı ve 2 parametre alıyor. public static int sum(int x, int y) { return (x + y); } // aÅırı yüklenmiÅ sum() fonksiyonu // metod ismi aynı ve 3 parametre alıyor. public static int sum(int x, int y, int z) { return (x + y + z); } // aÅırı yüklenmiÅ sum() fonksiyonu // metod ismi aynı ve 2 parametre alıyor. Fakat veri tipi int deÄil, double oldu! public static double sum(double x, double y) { return (x + y); } } ```` Yukarıda "Sum" sınıfı içinde "sum" isimli metotlar vardır. Bu metotların hepsi aynı isimle, aynı iÅi yapıyorlar. Fakat, farklı biçimlerle bunu yapıyorlar. Metot ismi aynı olsa da farklı sayıda parametre alıyorlar. Farklı veri tipleri alabiliyorlar. Aynı isimli metodun farklı sayıda parametre veya farklı sayıda veri tipiyle ile çalıÅmasına metot aÅırı yüklenmesi diyoruz. ## Metotların Ezilmesi (Overriding Metods) Java'da alt sınıflar ATA sınıftan aldıkları metotları ezebilirler. Bu yönteme "Overriding" denilmektedir. Alt sınıfta üst sınıfın metodunu ezmek için "@Override" anahtar kelimesi kullanılır. Ãnemli: Metodu ezebilmek için alt sınıftaki metot imzasıyla, üst sınıftaki metot imzası aynı olması gerekmektedir. Metot imzasından kasıt, metot isimlerinin aynı olması, aynı girdileri alması ve aynı tipte deÄer döndürmeli veya döndürmemelidir. Ayrıca, Java'da üst sınıftaki "private" metotları ezemezseniz, yani "override" edemezsiniz. ````java @Override protected void showInfo() { System.out.println("ElectricCar: " + toString()); } ```` Yukarıdaki "showInfo" metodu, "ElectricCar" sınıfı içinde "@Override" tanımlamasıyla üst sınıftaki metodu ezmektedir. "ElectricCar" tipinden oluÅturulan nesneler üzerinden "showInfo" metodunu çaÄıracak olursak "ElectricCar" sınıfı içindeki metodu çaÄıracaktır. ````java ElectricCar electricCar3 = new ElectricCar(); electricCar3.setLicensePlate("45 FB 1907"); electricCar3.setBrand("BMW"); /* ElectricCar tipinde bir nesne yaratıp, bu nesne üzerinden "showInfo" metodunu çaÄırdıÄımızda, * "ElectricCar" sınıfı içindeki metodu çaÄıracaktır. * Metot ezmesi yaptıÄımız için kalıtım aldıÄı üst sınıftaki "Car" sınıfındaki "showInfo" metodunu çaÄırmayacaktır. */ electricCar3.showInfo(); ```` ```` Ekran Ãıktısı: ElectricCar: [BMW 45 FB 1907 1000.0] ```` "Car" sınıfı tipinden üretilmiÅ olan nesne üzerinden "showInfo" metodu çaÄırıldıÄında alt sınıftakileri deÄil de "Car" sınıfında tanımlı olan metodu çaÄıracaktır. ````java Car carObject1 = new Car(); carObject1.setBrand("Mercedes"); carObject1.setLicensePlate("34 AKH 1970"); /* Car tipinde bir nesne yaratıp, bu nesne üzerinden "showInfo" metodunu çaÄırdıÄımızda, * "Car" sınıfı içindeki metodu çaÄıracaktır. Alt sınıftaki sınıflara ait metotları çaÄırmayacaktır. */ carObject1.showInfo(); ```` ```` Ekran Ãıktısı: Car: [Mercedes 34 AKH 1970] ````