Soyut sınıf vs interface
- Java kursu
- Orta seviye
- Ders 56/116
- 5 dk
Soyut sınıf ve interface farkını öğrenirsin.
Soyut sınıf vs interface
Abstract sınıf ve interface benzer sözleşmeler sağlar ama farklıdır. Abstract sınıf durum (alan) ve somut metot taşır; tek sınıf extends eder. Interface durum taşımaz (sabit hariç); birden çok sınıf implements eder.
Örnek: abstract class Account { double balance; abstract void deposit(double amount); } abstract sınıftır; balance alanı vardır. interface Printable { void print(); } ise interface'tir; alan içermez. Bir sınıf tek abstract sınıfı extends eder ama birden çok interface'i implements eder. Paylaşılan durum ve ortak metot gerekiyorsa abstract sınıf; yalnızca sözleşme gerekiyorsa interface seçilir. Doğru araç, tasarımın ihtiyacına bağlıdır.
Ortak durum için abstract
Abstract sınıf, alt sınıfların paylaştığı durum ve davranışı taşımak için idealdir. Interface durum tutamaz; bu yüzden ortak alan gerektiğinde abstract sınıf seçilir.
Örnek: bir banka hesabı hiyerarşisinde balance alanı tüm alt sınıflarda gerekli ise, abstract class Account { double balance; } yazarsın. Bu alanı her alt sınıf tekrar tanımlamaz. Aynı şekilde void deposit ve void withdraw ortak metotları abstract sınıfta toplanır. Interface ile bu mümkün değildir. Abstract sınıf, 'is-a' ilişkisini temsil eder; interface 'can-do' ilişkisini. Doğru seçim, sınıf hiyerarşisini sade tutar.
Uygulama Account abstract sınıfını tanımla
Account adında bir abstract sınıf tanımla. İçine double balance alanını ekle ve yapıcı Account(double balance) yaz; alanı ata. abstract void deposit(double amount) imzasını ekle. class SavingsAccount extends Account yaz; yapıcı SavingsAccount(double balance) ile üst yapıcıyı super(balance) çağır. public void deposit(double amount) metodunu yaz; gövdesi balance += amount; ve System.out.println("Yeni bakiye: " + balance); içersin. main içinde SavingsAccount a = new SavingsAccount(100); ile a.deposit(50) çağır.
Başlangıç kodu
// Soyut Account sınıfını tanımla
// balance alanı ve abstract deposit ekle
// SavingsAccount alt sınıfını yaz
// main'de deposit çağırÖrnek çözüm
abstract class Account {
double balance;
Account(double balance) {
this.balance = balance;
}
abstract void deposit(double amount);
}
class SavingsAccount extends Account {
SavingsAccount(double balance) {
super(balance);
}
public void deposit(double amount) {
balance += amount;
System.out.println("Yeni bakiye: " + balance);
}
}
class Main {
public static void main(String[] args) {
SavingsAccount a = new SavingsAccount(100);
a.deposit(50);
}
}Beklenen çıktı
Yeni bakiye: 150.0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Sınıf ilişkisini tamamla
class SavingsAccount ____ Account {
public void deposit(double amount) { }
}
class SavingsAccount extends Account {
public void deposit(double amount) { }
}
Açıklama: extends kelimesi abstract sınıfı miras alır.
2 Hangi durumda abstract sınıf interface'e tercih edilir?
- Sadece sözleşme gerektiğinde
- Ortak durum ve metot gerektiğinde Doğru cevap
- Hiçbir zaman
- Çoklu kalıtım gerektiğinde
Açıklama: Ortak durum ve metot abstract sınıfı gerektirir.
3 Soyut sınıf ve interface farklarını eşle
| Kavram | Anlamı |
|---|---|
abstract class |
Durum taşır |
interface |
Sözleşme taşır |
extends |
Tek miras |
implements |
Çoklu uygulama |