İçeriğe geç

Bölüm 11 Alıştırmalar

11.1 Doğru mu yanlış mı? Türemiş sınıf, taban sınıfın bir alt kümesi midir?

11.2 Türetme yapmak için hangi anahtar sözcük kullanılır?

11.3 Türetme nedir? Çoklu türetme nedir? Java çoklu türetmeyi destekler mi?

11.4 (a)’ da bulunan C sınıfının çıktısı nedir? (b)’de verilen kodda derleme zamanında nasıl bir hata oluşur.

11.5 Türemiş sınıf, taban sınıfın constructor’ını nasıl çağırır?

11.6 Doğru mu yanlış mı? Türemiş sınıftan constructor çağrıldığında, her zaman taban sınıfın parametresiz constructor’u çağrılır.

11.7 Doğru mu yanlış mı? Taban sınıfta tanımlanan private bir metot override edilebililir mi?

11.8 Doğru mu yanlış mı? Taban sınıfta tanımlanan static bir metot override edilebilir mi?

11.9 Türemiş sınıftan, taban sınıfın constructorını doğrudan nasıl çağırabilirsiniz?

11.10 Taban sınıfın override edilmiş bir metodu türemiş sınıftan nasıl çağırılabilir?

11.11 Aşağıdaki kodda bulunan hataları belirtiniz?

1 public class Circle {
2         private double radius;
3
4         public Circle(double radius) {
5                 radius = radius;
6     }
7
8         public double getRadius() {
9                 return radius;
10     }
11
12         public double getArea() {
13                 return radius * radius * Math.PI;
14         }
15 }
16
17 class B extends Circle {
18         private double length;
19
20         B(double radius, double length) {
21                 Circle(radius);
22                 length = length;
23         }
24
25         @Override
26         public double getArea() {
27                 return getArea() * length;
28         }
29 }

11.12 Metot overloading ve method overriding arasındaki farkları açıklayınız.

11.13 Türemiş sınıfta, taban sınıf ile aynı imzaya sahip ve geri dönüş türü aynı olan bir metot varsa, bu metot overload mu edilmiştir, override mı?

11.14 Türemiş sınıfta, taban sınıf ile aynı imzaya sahip ve geri dönüş türü farklı olan bir metot varsa, bu bir hataya neden olur mu?

11.15 Türemiş sınıfta, taban sınıf ile aynı isme sahip ancak farklı parametrik yapıda olan bir metot varsa, bu metot overload mu edilmiştir, override mı?

11.16 @Override notasyonu kullanmanın faydası nedir?

11.17 Çok biçimlilik nedir? Geç bağlama nedir?

11.18 Metot eşleştirme ve method bağlama arasındaki farkları açıklayınız..

11.19 Object[] türünden bir değişkene new int[50], new Integer[50], new String[50], ya da new Object[50], ifadeleri atanabilir mi?

11.20 Aşağıdaki programdaki hata nedir?

1 public class Test {
2         public static void main(String[] args) {
3                 Integer[] list1 = {12, 24, 55, 1};
4                 Double[] list2 = {12.4, 24.0, 55.2, 1.0};
5                 int[] list3 = {1, 2, 3};
6                 printArray(list1);
7                 printArray(list2);
8                 printArray(list3);
9         }
10
11         public static void printArray(Object[] list) {
12                 for (Object o: list)
13                 System.out.print(o + ” “);
14             System.out.println();
15     }
16 }

11.21 Aşağıdaki kodun çıktısı nedir?

11.22 Aşağıdaki programın çıktısı nedir?

1 public class Test {
2         public static void main(String[] args) {
3                 A a = new A(3);
4 }
5 }
6
7 class A extends B {
8         public A(int t) {
9                System.out.println(”A’nın constructorı çağrıldı.”);
10         }
11 }
12
13 class B {
14         public B() {
15                 System.out.println(”B’nin constructorı çağrıldı”);
16     }
17 }

 new A(3) ifadesi yürütüldüğünde Object sınıfının parametresiz constructorı çağırılır mı?

11.23 Aşağıdaki programın çıktısı nedir?

public class Test {
 public static void main(String[] args) {
  new A();
  new B();
 }
}
class A {
 int i = 7;
 public A() {
  setI(20);
  System.out.println(“i from A is ” + i);
 }
 public void setI(int i) {
  this.i = 2 * i;
 }
}
class B extends A {
 public B() {
  System.out.println(“i from B is ” + i);
 }
 public void setI(int i) {
  this.i = 3 * i;
 }
}

11.24 Aşağıdaki ifadelerin hangileri doğru hangileri yanlıştır.

■ Türemiş sınıf türünden bir nesneyi her zaman taban sınıf türüne atayabilirsiniz.
■ Taban sınıf türünden bir nesneyi her zaman türemiş sınıf türüne atayabilirsiniz.

11.25 Madde 11.1 ve 11.2’de yer alan GeometricObject ve Circle sınıfları için aşağıdaki soruları cevaplayınız:

a. circle ve object değişkenlerinin aşağıdaki şekilde yaratıldığını varsayalım.
Circle circle = new Circle(1);
GeometricObject object = new GeometricObject();
Aşağıdaki mantıksal ifadeler doğru mudur, yanlış mıdır?
(circle instanceof GeometricObject)
(object instanceof GeometricObject)
(circle instanceof Circle)
(object instanceof Circle)
b. Aşağıdaki deyimler derlenebilir mi?
Circle circle = new Circle(5);
GeometricObject object = circle;
c. Aşağıdaki deyimler derlenebilir mi?
GeometricObject object = new GeometricObject();
Circle circle = (Circle)object;

11.26  Fruit, Apple, Orange, GoldenDelicious, ve McIntosh sınıflarının aşağıdaki türetme hiyerarşisi ile tanımlandığını varsayalım.

Aşağıdaki kod parçasının verildiğini varsayalım:

Fruit fruit = new GoldenDelicious();
Orange orange = new Orange();
Aşağıdaki soruları cevaplayınız:
a. fruit instanceof Fruit?
b. fruit instanceof Orange?
c. fruit instanceof Apple?
d. fruit instanceof GoldenDelicious?
e. fruit instanceof McIntosh?
f. orange instanceof Orange?
g. orange instanceof Fruit?
h. orange instanceof Apple?
i. Apple sınıfında makeAppleCider metodunun tanımlandığını varsayalım.  fruit nesnesi ile bu metot çağrılabilir mi?  orange nesnesi ile bu metot çağrılabilir mi?
j. Orange sınıfında makeOrangeJuice metodunun tanımlandığını varsayalım.  orange nesnesi ile bu metot çağrılabilir mi?  fruit nesnesi ile bu metot çağrılabilir mi?
k. Orange p = new Apple() deyimi geçerli midir?
l. McIntosh p = new Apple() deyimi geçerli midir?
m. Apple p = new McIntosh() deyimi geçerli midir?

11.27 Aşağıdaki programdaki hata nedir?

1 public class Test {
2         public static void main(String[] args) {
3                 Object fruit = new Fruit();
4                 Object apple = (Apple)fruit;
5     }
6 }
7
8 class Apple extends Fruit {
9 }
10
11 class Fruit {
12 }

11.28 Her nesnenin toString ve equals metodu var mıdır? Bunlar nereden gelirler? Nasıl kullanılırlar? Bu metotları override etmek uygun olur mu?

11.29  equals metodu override edilirken yapılan tipik bir hata, türemiş sınıfta metot imzasının yanlış yazılmasıdır. Örneğin equals metodu, (b) ‘de gösterildiği gibi equals(Object circle) biçiminde yazılması gerekirken, (a)’da gösterildiği gibi equals(Circle circle) şeklinde yanlış olarak yazılmıştır. Aşağıdaki sınıfın çıktısını gösteriniz.

(a) ve (b) verilen her iki durum için, Circle sınıfını test ediniz.

Test sınıfındaki Circle, Object olarak değiştirillirse, Test (a) ve (b) de Circle sınıfı kullanılarak çalıştırıldığında çıktısı ne olur.

11.30 Aşağıdakiler nasıl yapılır?

a. double türden değer tutan bir ArrayList yaratmak.
b. Listeye bir nesne eklemek.
c. Listenin başına bir nesne eklemek.
d. Listedeki nesne sayısını bulmak.
e. Verilen bir nesnesi listeden çıkarmak.
f. Listede bulunan son nesneyi çıkarmak.
g. Verilen bir nesnenin listede olup olmadığını kontrol etmek.
h. Listenin verilen indeksinde bulunan nesneyi elde etmek.

11.31 Aşağıdaki kodda bulunan hataları belirtiniz?

ArrayList<String> list = new ArrayList<>();
list.add(“Denver”);
list.add(“Austin”);
list.add(new java.util.Date());
String city = list.get(0);
list.set(3, “Dallas”);
System.out.println(list.get(3));

11.32  ArrayList  türünden list nesnesinin elemanlarının {”Dallas”, “Dallas”, “Houston”, “Dallas”} olduğunu varsayalım. list.remove(”Dallas”) metodu bir kere çağrıldıktan sonra list nesnesinin elemanları ne olur.

Aşağıdaki kod, değeri “Dallas” olan tüm elemanları listeden çıkarır mı? Eğer çıkarmazsa, kodu düzeltiniz.

for (int i = 0; i < list.size(); i++)
 list.remove(“Dallas”);

11.33 Aşağıdkai kod parçasının çıktısının  [2, 3] yerine [1, 3].olmasının nedenini açıklayınız?

ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.remove(1);
System.out.println(list);

11.34 Aşağıdaki kod neden yanlış, açıklayınız?

ArrayList<Double> list = new ArrayList<>();
list.add(1);

11.35 Aşağıdaki deyimlerde bulunan hataları düzeltiniz:

int[] array = {3, 5, 95, 4, 15, 34, 3, 6, 5};
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(array));

11.36 Aşağıdaki deyimlerde bulunan hataları düzeltiniz:

int[] array = {3, 5, 95, 4, 15, 34, 3, 6, 5};
System.out.println(java.util.Collections.max(array));

11.37 Aynı pakette bulunan bir sınıfın erişebileceği, ancak farklı pakette bulunan bir sınıfın erişemeyeceği bir sınıf tanımında hangi erişim belirleyici kullanılmadır?

11.38 Farklı pakette bulunan bir sınıfın erişemeyeceği, ancak hangi pakette olursa olsun türemiş sınıfın erişebileceği bir sınıf tanımında hangi erişim belirleyici kullanılmadır?

11.39 IAşağıdaki kodda bulunan A ve B sınıfları aynı pakette bulunmaktadır. (a)’da bulunan soru işareti yerine boşluk karakteri konulursa, B sınıfı derlenebilir mi? Soru işareti yerine private anahtar sözcüğü konulursa, B sınıfı derlenebilir mi? Soru işareti yerine protected anahtar sözcüğü konulursa, B sınıfı derlenebilir mi?

11.40 IAşağıdaki kodda bulunan A ve B sınıfları farklı paketlerde bulunmaktadır. (a)’da bulunan soru işareti yerine boşluk karakteri konulursa, B sınıfı derlenebilir mi? Soru işareti yerine private anahtar sözcüğü konulursa, B sınıfı derlenebilir mi? Soru işareti yerine protected anahtar sözcüğü konulursa, B sınıfı derlenebilir mi?

11.41 Bir sınıftan türetme yapılmasını nasıl engellersiniz? Bir metodun overrride edilmesini nasıl engellersiniz?

11.42 Aşağıdaki ifadelerin hangileri doğru, hangileri yanlıştır.

a. protected bir veri elamanı ya da metoda, aynı pakette bulunan her bir sınıf tarafından erişilebilir.
b. protected bir veri elamanı ya da metoda, farklı pakette bulunan her bir sınıf tarafından erişilebilir.
c. protected bir veri elamanı ya da metoda, farklı ya da aynı pakette bulunan türemiş sınıfları tarafından erişilebilir.
d. final sınıf türünden nesne yaratılabilir.
e. final sınıflardan türetme yapılabilir.
f. final metotlar override edilebilir.