Bölüm 13 Alıştırmalar
13.1 Aşağıdaki sınıflardan hangileri geçerli bir soyut sınıf tanımıdır?
13.2 getArea() ve getPerimeter() metotları GeometricObject sınıfından çıkarılabilir. getArea() ve getPerimeter() metotlarını GeometricObject sınıfında soyut metot olarak tanımlamanın faydaları nelerdir?
13.3 Doğru mu yanlış mı?
a. Bir sanal sınıf, sanal olmayan bir sınıf gibi kullanılabilir ancak new operatörü kullanılarak bir soyut sınıf nesnesi yaratılamaz.
b. Soyut sınıflar türetilebilir.
c. Soyut olmayan taban sınıftan türemiş bir sınıf soyut olamaz.
d. Taban sınıfın soyut olmayan bir metodu, türemiş sınıfta soyut olarak tanımlanarak override edilemez.
e. Soyut metot statik olamaz.
13.4 Aşağıda verilmiş olan iki satır kod derleme zamanında hata oluşturmazken, neden çalışma zamanı hatasına neden olur?
Number numberRef = new Integer(0);
Double doubleRef = (Double)numberRef;
13.5 Aşağıda verilmiş olan iki satır kod derleme zamanında hata oluşturmazken, neden çalışma zamanı hatasına neden olur?
Number[] numberArray = new Integer[2];
numberArray[0] = new Double(1.5);
13.6 Aşağıdaki kodun çıktısı nedir?
public class Test {
public static void main(String[] args) {
Number x = 3;
System.out.println(x.intValue());
System.out.println(x.doubleValue());
}
}
13.7 Aşağıdaki koddaki hata nedir? (Not; Integer ve Double sınıfıları için compareTo metodu Bölüm 10.7’de anlatılmıştı.)
public class Test {
public static void main(String[] args) {
Number x = new Integer(3);
System.out.println(x.intValue());
System.out.println(x.compareTo(new Integer(4)));
}
}
13.8 Aşağıdaki programdaki hata nedir?
public class Test {
public static void main(String[] args) {
Number x = new Integer(3);
System.out.println(x.intValue());
System.out.println((Integer)x.compareTo(new Integer(4)));
}
}
13.9 Calendar sınıfını kullanarak bir Calendar nesnesi yaratabilir misiniz?
13.10 Calendar sınıfının hangi metodu soyuttur?
13.11 Şimdiki zamanı gösteren bir Calendar nesnesi nasıl yaratırsınız?
13.12 Calendar türünden c nesnesinden yıl, ay, tarih, saat, dakika ve saniyeyi nasıl elde edersiniz?
13.13 A bir arayüz olsun. new A()’yı kullanarak bir nesne yaratabilir misiniz?
13.14 A bir arayüz olsun. Aşağıdaki gibi A türünden x isimli bir referans değişkeni bildirebilir misiniz?
A x;
13.15 Aşağıdaki arayüzlerden hangileri doğrudur?
13.16 Aşağıdaki kodun çıktısı nedir?
interface A {
void m1();
}
class B implements A {
void m1() {
System.out.println(“m1”);
}
}
13.17 Doğru mu yanlış mı? Eğer bir sınıf Comparable arayüzünü yazarsa, bu sınıf türünden bir nesne compareTo metodunu çağırabilir.
13.18 String sınıfında bulunan compareTo metodu için aşağıdaki metot bildirimlerinden hangisi doğrudur?
public int compareTo(String o)
public int compareTo(Object o)
13.19 Aşağıdaki kod derlenebilir mi? Neden?
Integer n1 = new Integer(3);
Object n2 = new Integer(4);
System.out.println(n1.compareTo(n2));
13.20 Bir sınıfta Comparable arayüzünü yazmadan CompareTo metodunu tanımlayabilirsiniz. Comparable arayüzünü yazmanın faydası nedir?
13.21 Aşağıdaki koddaki hata nedir?
public class Test {
public static void main(String[] args) {
Person[] persons = {new Person(3), new Person(4), new Person(1)};
java.util.Arrays.sort(persons);
}
}
class Person {
private int id;
Person(int id) {
this.id = id;
}
}
13.22 Eğer bir sınıf java.lang.Cloneable arayüzünü yazmamışsa, bu sınıftan bir nesnenin kopyalanması için clone metodunu çağırabilir misiniz? Date sınıfı Cloneable arayüzünü yazmış mıdır?
13.23 House sınıfı (Madde 13.11’de tanımlanan) clone() metodunu override etmeseydi ya da java.lang.Cloneable arayüzünü yazmasaydı ne olurdu?
13.24 Aşağıdaki kodun çıktısı nedir?
java.util.Date date = new java.util.Date();
java.util.Date date1 = date;
java.util.Date date2 = (java.util.Date)(date.clone());
System.out.println(date == date1);
System.out.println(date == date2);
System.out.println(date.equals(date2));
13.25 Aşağıdaki kodun çıktısı nedir?
ArrayList<String> list = new ArrayList<>();
list.add(“Istanbul”);
ArrayList<String> list1 = list;
ArrayList<String> list2 = (ArrayList<String>)(list.clone());
list.add(“Canakkale”);
System.out.println(list == list1);
System.out.println(list == list2);
System.out.println(“list ” + list);
System.out.println(“list1 ” + list1);
System.out.println(“list2.get(0) ” + list2.get(0));
System.out.println(“list2.size() ” + list2.size());
13.26 Aşağıdaki koddaki hata nedir?
public class Test {
public static void main(String[] args) {
GeometricObject x = new Circle(3);
GeometricObject y = x.clone();
System.out.println(x == y);
}
}
13.27 Soyut sınıflar yerine neden arayüzlerin kullanıldığını gösteren bir örnek veriniz.
13.28 Soyut sınıf ve arayüz kavramlarını açıklayınız. Soyut sınıflar ve arayüzler arasındaki benzerlikler ve farklar nelerdir?
13.29 Doğru mu yanlış mı?
a. Bir arayüz ayrı bir bytecode dosyası olarak derlenir.
b. Bir arayüzün statik metotları olabilir.
c. Bir arayüz bir ya da daha fazla arayüzden türetilmiş olabilir.
d. Bir arayüz bir soyut sınıftan türetilmiş olabilir.
e. Bir soyut sınıf bir arayüzden türetilmiş olabilir.
13.30 Aşağıdaki kodun çıktısı nedir?
Rational r1 = new Rational(-2, 6);
System.out.println(r1.getNumerator());
System.out.println(r1.getDenominator());
System.out.println(r1.intValue());
System.out.println(r1.doubleValue());
13.31 Aşağıdaki program neden hatalıdır?
Rational r1 = new Rational(-2, 6);
Object r2 = new Rational(1, 45);
System.out.println(r2.compareTo(r1));
13.32 Aşağıdaki program neden hatalıdır?
Object r1 = new Rational(-2, 6);
Rational r2 = new Rational(1, 45);
System.out.println(r2.compareTo(r1));
13.33 Madde 13.13 Rational.java’da 82-85 satırları arasında kodu if deyimi yerine bir satır kod kullanarak nasıl basitleştirebilirsiniz?
13.34 Programın akışını takip ediniz ve aşağıdaki kodun çıktısını gösteriniz.
Rational r1 = new Rational(1, 2);
Rational r2 = new Rational(1, -2);
System.out.println(r1.add(r2));
13.35 Sınıf tasarımı ilkelerini açıklayınız.