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]