Դաս 21.1։ Java – Inheritance

0

Superclass կոնստրուկտորի կանչ

Եթե դասը ժառանգում է մեկ այլ դասի հատկությունները, ապա ենթադասը ավտոմատ կերպով ձեռք է բերում գերագույն դասի նախնական կոնստրուկտորները: Սակայն, եթե ցանկանում եք կանչել Superclass-ի պարամետրացված կոնստրուկտորը, ապա պետք է օգտագործեք super բանալի բառը, ինչպես ցույց է տրված ստորև:

super(values);

Կոդի օրինակ

Այս հատվածում ներկայացված ծրագիրը ցույց է տալիս, թե ինչպես օգտագործել super բանալի բառը Superclass-ի պարամետրացված կոնստրուկտորը կանչելու համար: Այս ծրագիրը պարունակում է superclass և ենթադաս, որտեղ գերադաս դասը պարունակում է պարամետրացված կոնստրուկտոր, որն ընդունում է ամբողջական արժեք։ Եվ մենք օգտագործում էինք super keyword-ը` գերադաս դասի պարամետրացված կոնստրուկտորը ակտիվացնելու համար:

Copy և paste արեք հետևյալ ծրագիրը Subclass.java անունով ֆայլում։

Օրինակ՝

class Superclass {

int age;

 

Superclass(int age) {

this.age = age;

}

 

public void getAge() {

System.out.println(“The value of the variable named age in super class is: “ +age);

}

}

 

public class Subclass extends Superclass {

Subclass(int age) {

super(age);

}

 

public static void main(String argd[]) {

Subclass s = new Subclass(24);

s.getAge();

}

}

Գործարկեք վերը նշված կոդը՝ օգտագործելով հետևյալ շարահյուսությունը։

javac Subclass

java Subclass

Դուք կստանաք հետևյալ արդյունքը։

Արդյունքը՝

The value of the variable named age in super class is: 24

IS-A հարաբերություն/ IS-A Relationship

IS-A- ը միջոց է, ասել, որ այս օբյեկտը հանդիսանում է այդ օբյեկտի տեսակը: Եկեք տեսնենք, թե ինչպես է օգտագործել extends բանալի բառը։

public class Animal {

}

 

public class Mammal extends Animal {

}

 

public class Reptile extends Animal {

}

 

public class Dog extends Mammal {

}

Այժմ հիմք ընդունելով վերը նշված օրինակը (Object-Oriented terms), հետևյալն true է −

  • Կենդանին հանդիսանում է superclass կաթնասունների դասի համար

  • Կենդանին հանդիսանում է superclass սողունների դասի համար

  • Կաթնասունները և սողունները հանդիսանում են ենթադասեր պատկանող կենդանիների դասին

  • Շունը հանդիսանում է ենթադաս թե կաթնասունների, թե կենդանիների դասի համար

Այժմ, եթե հաշվի առնենք IS-A հարաբերությունները, կարելի է ասել, որ

  • Կաթնասունը (IS-A) կենդանի է

  • Սողունը (IS-A) կենդանի է

  • Շունը (IS-A) կաթնասուն է

  • Հետեւաբար`Շունը (IS-A) կենդանի է

Օգտագործելով extends keyword-ը, ենթադասները կկարողանան ժառանգել վերադասի բոլոր հատկությունները, բացառությամբ վերադասի մասնավոր հատկություններից՝ private properties:

Մենք կարող ենք հավաստիացնել, որ կաթնասունը կենդանի է instance operator-ի կիրառմամբ։

Օրինակ՝

class Animal {

}

 

class Mammal extends Animal {

}

 

class Reptile extends Animal {

}

 

public class Dog extends Mammal {

 

public static void main(String args[]) {

Animal a = new Animal();

Mammal m = new Mammal();

Dog d = new Dog();

 

System.out.println(m instanceof Animal);

System.out.println(d instanceof Mammal);

System.out.println(d instanceof Animal);

}

}

Արդյունքը՝

true

true

true

Քանի որ մենք արդեն իսկ հասկացանք extends keyword–ի կիրառումը, եկեք տեսնենք, թե ինչպես է այն օգտագործվում IS-A Relationship կոնտեսքստում։

Ընդհանրապես, բանալի բառերը օգտագործվում են դասերի հետ ինտերֆեյսի հատկություններ ժառանգելու համար: Ինտերֆեյսները երբեք չեն կարող ընդլայնվել դասի կողմից:

Օրինակ՝

public interface Animal {

}

 

public class Mammal implements Animal {

}

 

public class Dog extends Mammal {

}

instanceof Keyword

Եկեք օգտագործենք instanceof օպերատորը` ստուգելու համար, որ կաթնասունը իրականում կենդանի է, իսկ շունը, ըստ էության, կենդանի:

Օրինակ՝

interface Animal{}

class Mammal implements Animal{}

 

public class Dog extends Mammal {

 

public static void main(String args[]) {

Mammal m = new Mammal();

Dog d = new Dog();

 

System.out.println(m instanceof Animal);

System.out.println(d instanceof Mammal);

System.out.println(d instanceof Animal);

}

}

Արդյունքը՝

true

true

true

HAS-A հարաբերություն/ HAS-A relationship

Այս հարաբերությունները հիմնականում հիմնված են օգտագործման վրա: Սա որոշում է, թե արդյոք դասը ունի HAS-A, թե ոչ: Այս հարաբերությունը օգնում է նվազեցնել կոդերի կրկնօրինակը, ինչպես նաև սխալները՝ bug-երը:

Օրինակ՝

public class Vehicle{}

public class Speed{}

 

public class Van extends Vehicle {

private Speed sp;

}

Այն ցույց է տալիս, որ VAN դասը (HAS-A) ունի արագությունը: Ունենալով առանձին դաս (Speed class) արագության համար, կարիք չկա դնել ամբողջ կոդը VAN դասում, ինչը հնարավորություն է տալիս մի քանի օգտագործել արագության դասը մի քանի անգամ տաբեր հավելվածներում։

Object-Oriented հատկությայն շնոհիվ օգտվողները կարիք չունեն անհանգստանալու, թե որ օբյեկտն է իրականացնում գործը: Դրան հասնելու համար VAN դասը թաքցնում է մանրամասները օգտատերներից: Այսպիսով, տեղի ունենում հետևյալը․ օգտատերը խնդրում է Van դասին որոշակի գործողություն կատարելու համար, և Van դասը կամ ինքնուրույն կկատարի աշխատանքը կամ կխնդրի մեկ այլ դասի՝ իրականացնել այն։

Types of Inheritance

Ստորև ներկայացված են ժառանգության տարբեր տեսակները։

types_of_inheritance

Կարևոր է հիշել, որ Java-ն չի աջակցում բազմակի ժառանգությանը՝ multiple inheritance: Սա նշանակում է, որ դասը չի կարող ընդլայնել մեկից ավելի դաս: Հետևաբար, հետևյալը անօրինական է։

Օրինակ՝

public class extends Animal, Mammal{}

Հարգելի ընթերցող, խնդրում ենք չմոռանալ like տալ մեր ֆեյսբուքյան էջին, քանի որ նորությունների մեծ մասը առաջինը տեղադրվում է հենց այնտեղ։ Ինչպես նաև հետևեք մեզ այլ սոցիալական ցանցերում և, իհարկե, գրանցվեք մեր բլոգում։

Share.