6- Metodlar ve Fonksiyonlar

### Java Metod Tanımlama ve Çağırma


Metodlar, belirli bir görevi gerçekleştiren kod bloklarıdır ve kodun yeniden kullanılabilirliğini artırır. Java'da metod tanımlama ve çağırma işlemleri şu şekilde yapılır:


#### Metod Tanımlama


Metod tanımlarken, dönüş tipi, metodun adı, parametreler (varsa) ve metodun gövdesi belirtilir.


```java

public class Main {

    // Metod tanımı

    public static void sayHello() {

        System.out.println("Hello, World!");

    }

}

```


- **public:** Erişim belirleyicidir, metodun nereden erişilebileceğini belirtir.

- **static:** Metodun sınıfa ait olduğunu belirtir, örnek oluşturulmadan çağrılabilir.

- **void:** Metodun dönüş tipidir, bu durumda metod bir değer döndürmez.

- **sayHello:** Metodun adıdır.

- **():** Parametre listesi (bu durumda parametre yok).


#### Metod Çağırma


Tanımlanan metod, başka bir metodun içinde çağrılabilir.


```java

public class Main {

    public static void main(String[] args) {

        // Metod çağırma

        sayHello();

    }


    public static void sayHello() {

        System.out.println("Hello, World!");

    }

}

```


### Metod Parametreleri ve Geri Dönüş Değerleri


#### Parametreli Metodlar


Metodlar, parametre alabilirler. Parametreler, metodun çağrıldığında alacağı değerlerdir.


```java

public class Main {

    public static void main(String[] args) {

        int sum = add(5, 10); // Metod çağırma

        System.out.println("Sum: " + sum);

    }


    // Parametreli metod tanımı

    public static int add(int a, int b) {

        return a + b; // Geri dönüş değeri

    }

}

```


- **int add(int a, int b):** İki tamsayı parametre alan ve bir tamsayı döndüren metod.


#### Geri Dönüş Değerleri


Metodlar, bir değer döndürebilirler. `return` ifadesi, metodun geri dönüş değerini belirtir.


```java

public class Main {

    public static void main(String[] args) {

        int maxValue = max(5, 10); // Metod çağırma

        System.out.println("Max value: " + maxValue);

    }


    // Geri dönüş değeri olan metod tanımı

    public static int max(int a, int b) {

        if (a > b) {

            return a; // a'yı döndür

        } else {

            return b; // b'yi döndür

        }

    }

}

```


### Metotlarda Overloading ve Overriding


#### Metot Overloading (Metod Aşırı Yükleme)


Metod aşırı yükleme, aynı metod adıyla birden fazla metod tanımlanmasını sağlar, ancak her metodun parametre listesi farklı olmalıdır.


```java

public class Main {

    public static void main(String[] args) {

        System.out.println(add(5, 10)); // 15

        System.out.println(add(5.5, 10.5)); // 16.0

    }


    // int parametreli metod

    public static int add(int a, int b) {

        return a + b;

    }


    // double parametreli metod

    public static double add(double a, double b) {

        return a + b;

    }

}

```


- Aynı isimde iki `add` metodu vardır, ancak biri `int`, diğeri `double` parametre alır.


#### Metot Overriding (Metod Geçersiz Kılma)


Metod geçersiz kılma, bir alt sınıfta, üst sınıfta tanımlanmış bir metodu yeniden tanımlamayı sağlar. Bu, özellikle kalıtımda kullanılır.


```java

class Animal {

    // Üst sınıfta metod

    public void makeSound() {

        System.out.println("Animal sound");

    }

}


class Dog extends Animal {

    // Alt sınıfta metod geçersiz kılma

    @Override

    public void makeSound() {

        System.out.println("Bark");

    }

}


public class Main {

    public static void main(String[] args) {

        Animal myDog = new Dog();

        myDog.makeSound(); // "Bark" çıktısını verir

    }

}

```


- `@Override` anatosyonu, metodu geçersiz kıldığınızı belirtir. Bu, derleme zamanında hata denetimi sağlar.


### Özet


Bu ders notları, Java'da metod tanımlama ve çağırma, metod parametreleri ve geri dönüş değerleri, metotlarda overloading (aşırı yükleme) ve overriding (geçersiz kılma) konularını kapsamaktadır. Metodlar, Java programlarının temel yapı taşlarıdır ve kodun yeniden kullanılabilirliğini, okunabilirliğini ve bakımını artırır. Overloading ve overriding, esnek ve genişletilebilir yazılımlar yazmak için güçlü araçlardır.