JavaRush /Java Blog /Random-TK /Java-da salgylanma görnüşlerini öwürmek
Sant9Iga
Dereje

Java-da salgylanma görnüşlerini öwürmek

Toparda çap edildi
Günüňiz haýyrly, Jawaraş adam. Java-da salgylanma görnüşleri barada soraglar alyp başladym. Her gezek şol bir zady gaýtalamazlyk üçin gysga makala ýazmagy makul bildim.

Ilki bilen kastingiň haýsy görnüşine seredeliň.

Kasting görnüşi (görnüşi öwürmek) bir görnüşiň üýtgeýän bahasyny başga görnüşiň bahasyna öwürmekdir. Onuň nämedigini we näme bilen iýilýändigini mysallara seredeliň. Bizde käbir synp iýerarhiýasy bar ( 1-nji surata serediň ). Bu ýerde iýerarhiýanyň ähli synplaryny, kime miras galandygyny we her synpyň usullaryny görüp bilersiňiz. Surat 1Giňelýän we şertnamalaýyn goşundy bar. CatSynpyň synpyň neslidigini görýäris Pet. Petöz gezeginde synpyň mirasdüşeri Animal. Writeazanymyzda:
Animal animalCat = new Cat();
Animal animalDog = new YorkshireTerrier();
Bu giňelýän aktýor (ýa-da gytaklaýyn). Salgylary giňeltdik animalCatwe animalDog. Obýektlere degişlidir Catwe Dog. Şeýle aktýorlar bilen, animalCat/animalDogiçindäki Cat/Dog, ýöne girmeýän salgylanma arkaly usullary çagyryp bilmeris Animal. Daralýan (ýa-da aç-açan) guýma ters tarapda ýüze çykýar:
Animal animalCat = new Cat();
Animal animalDog = new YorkshireTerrier();
Cat cat =(Cat)animalCat;
YorkshireTerrier dog = (YorkshireTerrier) animalDog;
Bu obýekti haýsy görnüşe zyňmak isleýändigimizi anyk görkezdik. UTöne seresap boluň !!! Eger şeýle etseňiz:
Animal animalCat = new Cat();
YorkshireTerrier dog = (YorkshireTerrier) animalCat;
düzüji bu kody geçer. Itöne RunTimesaňa zyňar:
Exception in thread "main" java.lang.ClassCastException: Animals.Cat cannot be cast to Animals.YorkshireTerrier
RunTimeCatiki dürli synpyň bardygyny görýär YorkshireTerrier. Öwürmek daralanda ClassCastException-dan gaça durmak üçin ulanyň instanceof.
Animal animalCat = new Cat();
if (animalCat instanceof YorkshireTerrier)
{
    YorkshireTerrier dog = (YorkshireTerrier) animalCat;
}
Eger animalCatşeýle bolsa YorkshireTerrier, onda ýumuş bolar, ýok bolsa hiç zat bolmaz.

Indi usullary ýitirip, şeýle ýalňyşlyklary alyp bilsek, bu näme üçin zerur?

Geliň, suratdaky diagramma laýyklykda düzen koduma seredeliň . 1 . SynpAnimal
public abstract class Animal
{
    String name;
    int age;
    String nameOfClass = getClass().getSimpleName();
    public void eat(){
        System.out.println(nameOfClass + ": Omnomnom");
    }
    public void sleep(){
        System.out.println(nameOfClass + ": Z-z-z-z");
    }
}
WildAnimalMiras alýan synpAnimal
public abstract class WildAnimal extends Animal
{
    public void steelChicken()
    {
        System.out.println(nameOfClass+": Muhaha,I stole a chicken!");
    }
}
PetMiras alýan synpAnimal
public abstract class Pet extends Animal
{
    public void peeInTray(){
        System.out.println(nameOfClass + ": Master, I peed");
    }
}
FoxMiras alýan synpWildAnimal
public class Fox extends WildAnimal
{
    public void eatColobok(){
        System.out.println(nameOfClass + ": I will eat you, Colobok");
    }
}
WolfMiras alýan synpWildAnimal
public class Wolf extends WildAnimal
{
    public void hawlAtTheMoon(){
        System.out.println(nameOfClass + ": Ouuuuu!!!Ouuuu!!!");
    }
}
CatMiras alýan synpPet
public class Cat extends Pet
{
    public void sleepOnKeyboard(){
        System.out.println(nameOfClass + ": Master, stop working!!I wanna sleep on your keyboard");
    }
}
YorkshireTerrierMiras alýan synpPet
public class YorkshireTerrier extends Pet
{
    public void bark(){
        System.out.println(nameOfClass + ": Meow!!! Meow!!!");
    }
}
Theagdaýy göz öňüne getiriň. Animalshli haýwanlary bir sanawda ýygnamaly, iýmitlendirmeli we soň ýatmaly. ArrayListHaýwanlary döredenimizde muny etmek aňsat ( Animal). Soň bolsa her haýwan üçin degişli usullary çagyrýarys:
public class ZOO
{
    public static void main(String[] args)
    {
        List<Animal> allAnimals = new ArrayList<>();
        allAnimals.add(new Cat());
        allAnimals.add(new Wolf());
        allAnimals.add(new Fox());
        allAnimals.add(new YorkshireTerrier());
        for (Animal animal : allAnimals)
        {
            animal.eat();
            animal.sleep();
        }
    }
}
animalUsuly çagyryp bilemok bark()ýa-da sleepOnKeyboard(). Sahypada allAnimalspişik, möjek, ýorik we tilki bar, ýöne olar azalýar Animal. Olarda diňe bar bolan usullar bar Animal. Bu gaty gowy, sebäbi ähli usullary çagyryp bilsek, näme üçin klawiaturada uklaýan möjek ýa-da towuk ogurlaýan ýorik gerek? Üns bereniňiz üçin sag boluň. Bu makala size peýdaly bolar diýip umyt edýärin. Tankyt we teswirler hoş geldiňiz)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION