MU – 5.2.5 – Kurucu ve Yapıcı Metotlar
Kurucu metotlar (constructors), bir sınıfın örneklerini (instance) oluşturduğumuzda çağrılan özel metotlardır. Bu metotlar, sınıfın başlatılmasını, başlangıç değerlerinin atanmasını veya diğer başlangıç işlemlerini gerçekleştirmek için kullanılır. İsim olarak sınıf adıyla aynıdır ve geri dönüş tipi bulunmaz.
Java’da bir sınıf birden fazla kurucu metoda sahip olabilir. Bu, aşırı yükleme (overloading) olarak adlandırılır. Farklı parametre listeleriyle farklı kurucu metotlar tanımlayabiliriz. Böylece farklı durumlar için uygun başlangıç değerlerini sağlayabiliriz.
Bir kurucu metotun temel özellikleri şunlardır:
- İsim: Kurucu metotun adı sınıfın adı ile aynı olmalıdır.
- Parametreler: Kurucu metot isteğe bağlı olarak parametre alabilir. Bu parametreler, sınıfın özelliklerine başlangıç değerlerini atamak için kullanılabilir.
- Geri Dönüş Tipi: Kurucu metotun bir geri dönüş tipi yoktur. Yani
void
veya herhangi bir başka türde geri dönüş yapmaz. - İşlem: Kurucu metotlar, bir nesnenin oluşturulması sırasında yürütülen işlemleri gerçekleştirmek için kullanılır. Bu işlemler genellikle sınıfın özelliklerinin başlangıç değerlerinin atanması gibi adımları içerir.
Örnek olarak, daha önce verdiğimiz arabaları temsil eden Araba
sınıfına birkaç farklı kurucu metot ekleyelim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
public class Araba { String marka; String model; int uretimYili; // Parametresiz kurucu metot public Araba() { marka = "Bilgi Yok"; model = "Bilgi Yok"; uretimYili = 0; } // Marka ve model bilgisi alarak kurucu metot public Araba(String marka, String model) { this.marka = marka; this.model = model; uretimYili = 0; // Üretim yılı bilgisi verilmediği için varsayılan olarak 0 atanır } // Tüm bilgileri alarak kurucu metot public Araba(String marka, String model, int uretimYili) { this.marka = marka; this.model = model; this.uretimYili = uretimYili; } // Araba bilgilerini yazdıran metot public void bilgiyiYazdir() { System.out.println("Araba markası: " + marka); System.out.println("Araba modeli: " + model); System.out.println("Üretim yılı: " + uretimYili); } public static void main(String[] args) { // Farklı kurucu metotları kullanarak Araba örnekleri oluşturma Araba araba1 = new Araba(); // Parametresiz kurucu metot kullanılır Araba araba2 = new Araba("Toyota", "Corolla"); // Marka ve model bilgisi alarak kurucu metot kullanılır Araba araba3 = new Araba("Ford", "Focus", 2019); // Tüm bilgileri alarak kurucu metot kullanılır // Araba bilgilerinin yazdırılması araba1.bilgiyiYazdir(); araba2.bilgiyiYazdir(); araba3.bilgiyiYazdir(); } } |
6. Uygulama :
Bir “Dortgen” sınıfı oluşturarak yapıcı metotlar ile kare ve dikdörtgen alanını bulan bir uygulama yapınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <EditText android:id="@+id/editTextKisaKenar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="131dp" android:ems="10" android:hint="Kısa Kenar" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/editTextUzunKenar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="22dp" android:ems="10" android:hint="Uzun Kenar" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="@+id/editTextKisaKenar" app:layout_constraintStart_toStartOf="@+id/editTextKisaKenar" app:layout_constraintTop_toBottomOf="@+id/editTextKisaKenar" /> <Button android:id="@+id/buttonKareAlani" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="15dp" android:text="Kare Alanı" app:layout_constraintBottom_toTopOf="@+id/buttonDikdortgenAlani" app:layout_constraintEnd_toEndOf="@+id/editTextUzunKenar" app:layout_constraintStart_toStartOf="@+id/editTextUzunKenar" /> <Button android:id="@+id/buttonDikdortgenAlani" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Dikdörtgen Alanı" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@+id/buttonKareAlani" app:layout_constraintStart_toStartOf="@+id/buttonKareAlani" app:layout_constraintTop_toTopOf="parent" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_begin="20dp" /> <TextView android:id="@+id/textViewAlan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="51dp" android:text="Alan" android:textAlignment="center" android:textSize="20sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/buttonDikdortgenAlani" /> </androidx.constraintlayout.widget.ConstraintLayout> |
Dortgen adıyla yeni bir sınıf oluşturun. Bu sınıf oluşturduktan sonra ALT+INS tuşlarına basarak kısaKenar parametreli bir kurucu metot oluşturun. Yine Dortgen dosyasında ALT+INS tuşlarına basarak kısaKenar ve uzunKenar parametreli bir kurucu metot daha oluşturun.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.example.metotkavrami3; public class Dortgen { public Integer kisakenar; public Integer uzunkenar; public Dortgen(Integer kisakenar) { this.kisakenar = kisakenar; this.uzunkenar = kisakenar; } public Dortgen(Integer kisakenar, Integer uzunkenar) { this.kisakenar = kisakenar; this.uzunkenar = uzunkenar; } public Integer alanBul(){ Integer alan; alan = kisakenar * uzunkenar; return alan; } } |
MainActivity.java dosyasının kodları da aşağıdaki gibi olmalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
package com.example.metotkavrami3; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.net.Inet4Address; public class MainActivity extends AppCompatActivity { EditText editTextKisaKenar, editTextUzunKenar; Button buttonKareAlani, buttonDikdortgenAlani; TextView textViewAlan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTextKisaKenar = findViewById(R.id.editTextKisaKenar); editTextUzunKenar = findViewById(R.id.editTextUzunKenar); buttonKareAlani = findViewById(R.id.buttonKareAlani); buttonDikdortgenAlani = findViewById(R.id.buttonDikdortgenAlani); textViewAlan = findViewById(R.id.textViewAlan); buttonKareAlani.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Integer kenar; Integer alan; kenar = Integer.parseInt(editTextKisaKenar.getText().toString()); Dortgen kare = new Dortgen(kenar); alan = kare.alanBul(); textViewAlan.setText(alan.toString()); } }); buttonDikdortgenAlani.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Integer kisaKenar; Integer uzunKenar; Integer alan; kisaKenar = Integer.parseInt(editTextKisaKenar.getText().toString()); uzunKenar = Integer.parseInt(editTextUzunKenar.getText().toString()); Dortgen dikdortgen = new Dortgen(kisaKenar,uzunKenar); alan = dikdortgen.alanBul(); textViewAlan.setText(alan.toString()); } }); } } |