Bu məqalə ilə yeni – 5-ci “Chapter”ə giriş etmiş oluruq. Hələ ki, mövzular ilə bağlı sadəcə qısa-qısa qeydlər yazacam. Gələcəkdə mövcud vəziyyətə baxıb mövzulara sonradan əlavələr edib, genişləndirə bilərəm.
Introducing Class Inheritance
Əgər bir class digər bir classdan törədilibsə, törədilən class “child class” və ya “descendant”, törəməsi alınan class isə “parent class” və ya “ancestor” class adlanır. Əgər X classı Y classından törənibsə, Y də öz növbəsində Z classından törənibsə, X classı dolayı yolla Z classının da child classı hesab olunur.
Java təkvarisliliyi (single inheritance) dəstəkləyir, yəni bir class birbaşa olaraq ancaq bir parent classdan törənə bilər. Çoxvarisliliyi (multiple inheritance) dəstəkləmir, ancaq zəncirvari şəkildə bir neçə törəmə etmək mümkündür:
class Z { }
class Y extends Z { }
class X extends Y { }
Təkvarislilikdə qeyd etdik ki, bir classın birbaşa olaraq ancaq bir parent classı ola bilər. Lakin parent classın bir neçə child classı ola bilər.
Əgər hər hansı bir classdan törəmə alınmasını istəmiriksə, o zaman həmin classı final edirik. Əgər final classdan törəmə almaq istəsək compiler xəta verəcək:
final class Z { }
class Y extends Z { } // cannot inherit from final Z
Extending a Class
Classın törəməsini almaq üçün extends açar sözündən istifadə edilir.
FIGURE. Defining and extending a class*
Animal.java:
class Animal {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Lion.java:
class Lion extends Animal {
private void roar() {
System.out.println("The " + getAge() + " year old lion says: Roar!");
System.out.println("Lion is " + age + " year old"); // DOES NOT COMPILE
}
}
Applying Class Access Modifiers
Top-level classlar ya public ola bilər ya da ki default, protected və private olmasına icazə verilmir. Inner classlar protected və private ola bilər, amma inner classlar OCA imtahanı mövzularına daxil deyil.
public class Test1 { }
class Test2 { }
protected class Test3 { } // DOES NOT COMPILE
private class Test4 { } // DOES NOT COMPILE
public classlar istənilən classlar tərəfindən istifadə oluna bilər. Lakin default classlara ancaq eyni paketdə olan subclasslar və ya classlar müraciət edə bilər.
Bir .java faylda maksimum bir public class mövcud ola bilər, amma istənilən sayda public olmayan class yaratmaq mümkündür. Ümumiyyətlə, .java faylda public class olmaya da bilər.
Yuxarıda qeyd olunan access modifiers ilə əlaqəli qaydalar interface`lər üçün də keçərlidir. Top-level interface`lər public və ya default ola bilər. Həmçinin java faylda maksimum bir public interface ola bilər.
Creating Java Objects
java.lang.Object yeganə classdır ki, heç bir parent classı yoxdur və javada bütün classlar bu classdan törəyib. Object classını xüsusi olaraq extends etməyə ehtiyac yoxdur, compiler avtomatik olaraq onu əlavə edir. Aşağıdakı classlar ekvivalentdir:
public class Book { }
public class Book extends java.lang.Object { }
Əgər class başqa bir classdan törəmirsə, dərhal həmin classın adının sonuna extends java.lang.Object ifadəsi əlavə edilir. Yox əgər başqa bir classdan törəyirsə, o zaman bu sintaksis əlavə edilmir, amma dolayı yolla həmin classın child`ı hesab olunur. Bir sözlə java.lang.Object hər zaman zəncirin ən yuxarısında dayanır (top of the tree).
[topics lang=az]

