Professional Documents
Culture Documents
Chapter11_Spring2024 tr
Chapter11_Spring2024 tr
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
Bölüm 11 Kalıtım ve Çokbiçimlilik
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
2
Motivasyonlar
Daireleri, dikdörtgenleri ve üçgenleri modellemek
için sınıflar tanımlayacağınızı varsayalım. Bu
sınıfların birçok ortak özelliği var. Gereksizliği
önlemek için bu sınıfları tasarlamanın en iyi yolu
nedir? Cevap kalıtım kullanmaktır.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
3
Üst Sınıflar ve Alt Sınıflar
GeometricObject
-color: String The color of the object (default: white).
-filled: boolean Indicates whether the object is filled with a color (default: false).
-dateCreated: java.util.Date The date when the object was created.
+GeometricObject() Creates a GeometricObject.
+GeometricObject(color: String, Creates a GeometricObject with the specified color and filled
filled: boolean) values.
+getColor(): String Returns the color.
+setColor(color: String): void Sets a new color.
+isFilled(): boolean Returns the filled property.
+setFilled(filled: boolean): void Sets a new filled property.
+getDateCreated(): java.util.Date Returns the dateCreated.
+toString(): String Returns a string representation of this object.
Circle Rectangle
-radius: double -width: double
+Circle() -height: double
+Circle(radius: double) +Rectangle()
+Circle(radius: double, color: String,
filled: boolean)
+Rectangle(width: double, height: double)
+Rectangle(width: double, height: double
GeometricObject
+getRadius(): double color: String, filled: boolean)
+setRadius(radius: double): void +getWidth(): double Daire
+getArea(): double +setWidth(width: double): void
+getPerimeter(): double +getHeight(): double
+setHeight(height: double): void
Dikdörtgen
+getDiameter(): double
+printCircle(): void +getArea(): double
+getPerimeter(): double TestCircleRectangle
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
4
Bazı Notlar
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
5
Üst Sınıfların Yapıcıları Miras Alınır
mı?
Hayır. Onlar kalıtsal değildir.
Açıkça veya dolaylı olarak çağrılırlar.
Super anahtar sözcüğünü açıkça kullanarak.
Bir kurucu, bir sınıfın örneğini oluşturmak için
kullanılır. Özellikler ve yöntemlerin aksine, bir üst
sınıfın kurucuları alt sınıfta miras alınmaz. Yalnızca
super anahtar sözcüğü kullanılarak alt sınıfların
kurucularından çağrılabilirler. super anahtar sözcüğü
açıkça kullanılmazsa, üst sınıfın arg'siz kurucusu
otomatik olarak çağrılır.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
6
Üst Sınıfın Kurucusu Her Zaman Çağrılır
Bir kurucu, aşırı yüklenmiş bir kurucuyu veya kendi üst
sınıfının kurucusunu çağırabilir. Bunlardan hiçbiri açıkça
çağrılmazsa, derleyici super() ifadesini kurucudaki ilk
ifade olarak koyar. Örneğin,
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
7
Süper Anahtar Kelimeyi
Kullanma
super anahtar sözcüğü, içinde super
geçen sınıfın üst sınıfını ifade eder. Bu
anahtar sözcük iki şekilde kullanılabilir:
Bir üst sınıf kurucusunu çağırmak için
Bir üst sınıf yöntemini çağırmak için
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
8
DİKKAT
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
9
Yapıcı Zincirleme
Bir sınıfın örneğini oluşturmak, kalıtım zinciri boyunca tüm üst sınıfların
kurucularını çağırır. Bu, yapıcı zinciri olarak bilinir.
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte();
}
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
public Kişi() {
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
10
animasyon
İzleme Yürütme
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte(); 1. Ana yöntemden
} başlayın
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
public Kişi() {
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
11
animasyon
İzleme Yürütme
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte(); 2. Fakülte
} kurucusunu çağırın
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
public Kişi() {
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
12
animasyon
İzleme Yürütme
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte();
}
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
3. Employee'nin no-arg
class Çalışan extends Kişi {
public Çalışan() {
yapıcısını çağırın
this("(2) Employee'nin aşırı yüklenmiş kurucusunu çağır");
System.out.println("(3) Çalışanın no-arg yapıcısı çağrıldı");
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
public Kişi() {
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
13
animasyon
İzleme Yürütme
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte();
}
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
public Kişi() {
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
14
animasyon
İzleme Yürütme
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte();
}
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
5. Person() yapıcısını çağırın
public Kişi() {
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
15
animasyon
İzleme Yürütme
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte();
}
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
public Kişi() { 6. println'i çalıştırın
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
16
animasyon
İzleme Yürütme
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte();
}
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
public Kişi() { 7. println'i çalıştırın
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
17
animasyon
İzleme Yürütme
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte();
}
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
public Kişi() { 8. println'i çalıştırın
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
18
animasyon
İzleme Yürütme
public class Fakülte extends Çalışan {
public static void main(String[] args) {
yeni Fakülte();
}
public Fakülte() {
System.out.println("(4) Fakültenin no-arg yapıcısı çağrıldı");
}
}
public Çalışan(String s) {
System.out.println(s);
}
}
sınıf Kişi {
public Kişi() {
System.out.println("(1) Person'ın no-arg yapıcısı çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
19
No-arg Yapıcısı Olmayan Bir Üst Sınıfın
Etkisi Üzerine Örnek
Programdaki hataları bulun:
public class Elma extends Meyve {
}
sınıf Meyve {
public Meyve(String isim) {
System.out.println("Fruit'in kurucusu çağrıldı");
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
20
Alt Sınıf Tanımlama
Bir alt sınıf, bir üst sınıftan miras alır. Ayrıca şunları
da yapabilirsiniz:
Yeni özellikler ekleyin
Yeni yöntemler ekleyin
Üst sınıfın yöntemlerini geçersiz kılın
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
21
Üst Sınıf Yöntemlerini Çağırma
Circle sınıfındaki printCircle() yöntemini aşağıdaki gibi yeniden
yazabilirsiniz:
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
22
Üst Sınıftaki Yöntemleri Geçersiz Kılma
Bir alt sınıf, yöntemleri bir üst sınıftan miras alır. Bazen alt sınıfın,
üst sınıfta tanımlanan bir yöntemin uygulamasını değiştirmesi
gerekir. Bu, yöntem geçersiz kılma olarak adlandırılır.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
23
NOT
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
24
NOT
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
25
Overriding ve Overloading
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {
A a = new A(); A a = new A();
a.p(10);
a.p(10.0);
10.0 a.p(10);
a.p(10.0);
10
}
} 10.0 }
} 20.0
class B { class B {
public void p(double i) { public void p(double i) {
System.out.println(i * 2); System.out.println(i * 2);
} }
} }
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
26
Nesne Sınıfı ve Yöntemleri
Java'daki her sınıf java.lang.Object sınıfından
türemiştir. Bir sınıf tanımlanırken kalıtım
belirtilmezse, sınıfın üst sınıfı Object'tir.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
27
Object içindeki toString()
yöntemi
toString() yöntemi, nesnenin bir dize temsilini döndürür.
Varsayılan uygulama, nesnenin bir örneği olduğu sınıf adı, at
işareti (@) ve bu nesneyi temsil eden bir sayıdan oluşan bir
dize döndürür.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
28
Polimorfizm
Çok biçimlilik, bir üst tip değişkeninin bir alt tip
nesneye başvurabileceği anlamına gelir.
PolimorfizmDemo
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
29
Dinamik Bağlama
Dinamik bağlama aşağıdaki gibi çalışır: Bir o nesnesinin C ,
C , ..., C12n-1 ve Cn sınıflarının bir örneği olduğunu varsayalım;
burada C , C 'in bir alt sınıfıdır, C1223 , C'nin bir alt sınıfıdır, ... ve
C , Cn-1n 'un bir alt sınıfıdır. Yani, Cn en genel sınıftır ve C1 en özel
sınıftır. Java'da, Cn Object sınıfıdır. Eğer o bir p metodunu
çağırırsa, JVM p metodu için C , C , ..., C12n-1 ve Cn , bu sırayla,
bulunana kadar uygulamayı arar. Bir uygulama bulunduğunda,
arama durur ve ilk bulunan uygulama çağrılır.
Cn Cn-1 ..... C2 C1
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
31
Yöntem Eşleştirme ve Bağlama
Bir yöntem imzasının eşleştirilmesi ve bir yöntem
uygulamasının bağlanması iki konudur. Derleyici,
derleme zamanında parametre türüne, parametre
sayısına ve parametrelerin sırasına göre eşleşen bir
yöntem bulur. Bir yöntem birkaç alt sınıfta
uygulanabilir. Java Sanal Makinesi, çalışma zamanında
yöntemin uygulamasını dinamik olarak bağlar.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
32
Genel Programlama
public class PolimorfizmDemo {
public static void main(String[] args) {
Çok biçimlilik, yöntemlerin çok çeşitli
m(new GraduateStudent());
m(new Student());
nesne argümanları için genel olarak
m(new Person()); kullanılmasına olanak tanır. Bu, genel
m(new Object());
} programlama olarak bilinir. Bir yöntemin
public static void m(Object x) { parametre türü bir üst sınıfsa (örn. Object),
System.out.println(x.toString());
} bu yönteme parametrenin alt sınıflarından
}
herhangi birinden (örn. Student veya
class GraduateStudent extends Student {
}
String) bir nesne geçirebilirsiniz.
Yöntemde bir nesne (örneğin, bir Student
class Öğrenci extends Kişi {
public String toString() { nesnesi veya bir String nesnesi)
"Öğrenci" olarak dön;
} kullanıldığında, çağrılan nesnenin
}
yönteminin (örneğin, toString) özel
class Kişi extends Nesne {
public String toString() {
uygulaması dinamik olarak belirlenir.
"Kişi" döndür;
}
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
33
Döküm Nesneleri
Döküm operatörünü daha önce bir ilkel tipteki değişkenleri diğerine
dönüştürmek için kullandınız. Döküm aynı zamanda bir miras
hiyerarşisi içinde bir sınıf türündeki bir nesneyi diğerine
dönüştürmek için de kullanılabilir. Önceki bölümde, şu ifade
kullanılmıştır
m(new Student());
Öğrenci b = o;
Öğrenci b = (Öğrenci)o;
Liang, Introduction to Java// Açık döküm
Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
35
Dökümden
Üst Sınıftan Alt Sınıfa
Bir nesneyi bir üst sınıftan bir alt sınıfa aktarırken
açık döküm kullanılmalıdır. Bu tür bir döküm her
zaman başarılı olmayabilir.
Elma x = (Elma)meyve;
Portakal x = (Portakal)meyve;
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
36
instanceof Operatör
Bir nesnenin bir sınıfın örneği olup olmadığını test etmek için
instanceof operatörünü kullanın:
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
37
TIP
Atamayı anlamaya yardımcı olması için,
meyve, elma ve portakal benzetmesini, Fruit
sınıfının Apple ve Orange için üst sınıf
olduğunu düşünebilirsiniz. Elma bir
meyvedir, bu nedenle bir Apple örneğini
Fruit değişkenine her zaman güvenli bir
şekilde atayabilirsiniz. Ancak, bir meyve
mutlaka bir elma değildir, bu nedenle bir
Fruit örneğini bir Apple değişkenine atamak
için açık döküm kullanmanız gerekir.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
38
Örnek: Polimorfizm ve Dökümün
Gösterilmesi
Bu örnek iki geometrik nesne oluşturur: bir daire
ve bir dikdörtgen, nesneleri görüntülemek için
displayGeometricObject yöntemini çağırır.
displayGeometricObject, nesne bir daire ise
alanı ve çapı görüntüler ve nesne bir dikdörtgen
ise alanı görüntüler.
CastingDemo
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
39
Bazı noktalar
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
40
Başka Bir Örnek
sınıf Hayvan {
void makeSound() {
System.out.println("Hayvan ses çıkarıyor...");
}
}
class Köpek extends Hayvan {
void makeSound() {
System.out.println("Köpek havlıyor...");
}
}
class Kedi extends Hayvan {
void makeSound() {
System.out.println("Kedi miyavlıyor...");
}
}
class TestPolymorphism2 {
public static void main(String args[]) {
Hayvan hayvan;
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
41
Neden?
Polimorfizmin Avantajları
Kod Yeniden Kullanılabilirliği: Polimorfizm, aynı isimli metotlar farklı sınıflarda kullanılabildiği için kodun yeniden
kullanımını sağlar.
Esneklik ve Dinamizm: Çok biçimlilik, bir nesnenin davranışının kullanıldığı bağlama bağlı olarak çalışma zamanında
değişebildiği daha esnek ve dinamik bir koda olanak tanır.
Azaltılmış Karmaşıklık: İlgili işlevler için aynı yöntem adının kullanılmasına izin vererek kodun karmaşıklığını azaltabilir,
kodun okunmasını ve bakımını kolaylaştırır.
Basitleştirilmiş Kodlama: Polimorfizm, yazılması gereken yöntem ve kurucu sayısını azaltarak kodlamayı basitleştirir.
Daha İyi Organizasyon: Çok biçimlilik, ilgili işlevleri tek bir sınıfta gruplandırarak kodun daha iyi düzenlenmesini sağlar.
Kod Genişletilebilirliği: Polimorfizm, mevcut kodu değiştirmeden üst sınıfın işlevselliğini genişletmek için yeni alt sınıflar
oluşturulabildiğinden kod genişletilebilirliğini sağlar.
Artan Verimlilik: Derleme zamanı çok biçimliliği daha verimli kodlamaya yol açabilir. Derleyici, kendisine iletilen
argümanların sayısına, türlerine ve sırasına bağlı olarak derleme zamanında çağrılacak uygun yöntemi seçebilir.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
42
Eşittir Yöntemi
equals() metodu, aşağıdakileri karşılaştırır
iki nesnenin içeriği. Object sınıfındaki equals yönteminin
varsayılan uygulaması aşağıdaki gibidir:
public boolean equals(Object obj) {
return this == obj;
}
Örneğin, equals
public boolean equals(Object o) {
if (o instanceof Circle) {
yöntemi Circle return yarıçap == ((Daire)o).yarıçap;
sınıfında }
geçersiz başka
false döndür;
kılınmıştır. }
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
43
NOT
== karşılaştırma operatörü, iki ilkel veri tipi
değerini karşılaştırmak veya iki nesnenin aynı
referansa sahip olup olmadığını belirlemek için
kullanılır. equals yöntemi, yöntemin nesnelerin
tanımlayıcı sınıfında değiştirilmiş olması
koşuluyla, iki nesnenin aynı içeriğe sahip olup
olmadığını test etmek için tasarlanmıştır. ==
işleci equals yönteminden daha güçlüdür, çünkü
== işleci iki referans değişkeninin aynı nesneye
atıfta bulunup bulunmadığını kontrol eder.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
44
ArrayList Sınıfı
Nesneleri saklamak için bir dizi oluşturabilirsiniz. Ancak dizi
oluşturulduktan sonra dizinin boyutu sabitlenir. Java, sınırsız sayıda
nesneyi saklamak için kullanılabilecek ArrayList sınıfını sağlar.
java.util.ArrayList<E>
+ArrayList() Creates an empty list.
+add(o: E) : void Appends a new element o at the end of this list.
+add(index: int, o: E) : void Adds a new element o at the specified index in this list.
+clear(): void Removes all the elements from this list.
+contains(o: Object): boolean Returns true if this list contains the element o.
+get(index: int) : E Returns the element from this list at the specified index.
+indexOf(o: Object) : int Returns the index of the first matching element in this list.
+isEmpty(): boolean Returns true if this list contains no elements.
+lastIndexOf(o: Object) : int Returns the index of the last matching element in this list.
+remove(o: Object): boolean Removes the element o from this list.
+size(): int Returns the number of elements in this list.
+remove(index: int) : boolean Removes the element at the specified index.
+set(index: int, o: E) : E Sets the element at the specified index.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
45
Jenerik Tip
ArrayList, E genel türüne sahip genel bir sınıf olarak
bilinir. Bir ArrayList oluştururken E yerine somut bir
tür belirtebilirsiniz. Örneğin, aşağıdaki deyim bir
ArrayList oluşturur ve referansını cities değişkenine
atar. Bu ArrayList nesnesi dizeleri depolamak için
kullanılabilir.
ArrayList<String> şehirler = new
ArrayList<String>();
ArrayList<String> şehirler = new ArrayList<>();
TestArrayListesi
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
46
Diziler ve ArrayList Arasındaki Farklar
ve Benzerlikler
Operation Array ArrayList
DistinctNumbers
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
47
Dizilerden/Dizilere Dizi Listeleri
Bir nesne dizisinden ArrayList oluşturma:
String[] dizi = {"kırmızı", "yeşil", "mavi"};
ArrayList<String> liste = new
ArrayList<>(Arrays.asList(dizi));
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
48
Dizi Listesinde max ve min
String[] dizi = {"kırmızı", "yeşil", "mavi"};
System.out.pritnln(java.util.Collections.max(
new ArrayList<String>(Arrays.asList(dizi)));
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
49
Dizi Listesini Karıştırma
Integer[] dizi = {3, 5, 95, 4, 15, 34, 3, 6, 5};
ArrayList<Integer> liste = new
ArrayList<>(Arrays.asList(dizi));
java.util.Collections.shuffle(liste);
System.out.println(liste);
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
50
Yığın Animasyonu
https://liveexample.pearsoncmg.com/dsanimation/StackeBook.html
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
51
MyStack Sınıfları
Nesneleri tutmak için bir yığın.
MyStack
MyStack
-list: ArrayList A list to store elements.
+isEmpty(): boolean Returns true if this stack is empty.
+getSize(): int Returns the number of elements in this stack.
+peek(): Object Returns the top element in this stack.
+pop(): Object Returns and removes the top element in this stack.
+push(o: Object): void Adds a new element to the top of this stack.
+search(o: Object): int Returns the position of the first element in the stack from
the top that matches the specified element.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
52
Korumalı Değiştirici
protected değiştiricisi bir sınıftaki verilere ve
yöntemlere uygulanabilir. Genel bir sınıftaki
korumalı bir veriye veya korumalı bir yönteme,
alt sınıflar farklı bir pakette olsa bile, aynı
paketteki veya alt sınıflarındaki herhangi bir sınıf
tarafından erişilebilir.
private, default, protected, public
Visibility increases
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
53
Erişilebilirlik Özeti
public
protected -
default - -
private - - -
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
54
Görünürlük Değiştiriciler
package p1;
public class C1 { public class C2 {
public int x; C1 o = new C1();
protected int y; can access o.x;
int z; can access o.y;
private int u; can access o.z;
cannot access o.u;
protected void m() {
} can invoke o.m();
} }
package p2;
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
55
Bir Alt Sınıf Erişilebilirliği Zayıflatamaz
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
56
NOT
Değiştiriciler sınıflar ve sınıf üyeleri
(veriler ve yöntemler) üzerinde kullanılır,
ancak final değiştiricisi bir yöntemdeki
yerel değişkenler üzerinde de
kullanılabilir. Final yerel değişkeni, bir
yöntemin içindeki sabittir.
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
57
Son Değiştirici
Son sınıf genişletilemez:
final class Math {
...
}
Liang, Introduction to Java Programming and Data Structures, Twelfth Edition, Global Edition,
Copyright © 2022 Pearson Education Ltd. Tüm hakları saklıdır.
58