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. Giňelýän we şertnamalaýyn goşundy bar.Cat
Synpyň 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 animalCat
we animalDog
. Obýektlere degişlidir Cat
we Dog
. Şeýle aktýorlar bilen, animalCat/animalDog
iç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 RunTime
saňa zyňar:
Exception in thread "main" java.lang.ClassCastException: Animals.Cat cannot be cast to Animals.YorkshireTerrier
RunTime
Cat
iki 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");
}
}
WildAnimal
Miras alýan synpAnimal
public abstract class WildAnimal extends Animal
{
public void steelChicken()
{
System.out.println(nameOfClass+": Muhaha,I stole a chicken!");
}
}
Pet
Miras alýan synpAnimal
public abstract class Pet extends Animal
{
public void peeInTray(){
System.out.println(nameOfClass + ": Master, I peed");
}
}
Fox
Miras alýan synpWildAnimal
public class Fox extends WildAnimal
{
public void eatColobok(){
System.out.println(nameOfClass + ": I will eat you, Colobok");
}
}
Wolf
Miras alýan synpWildAnimal
public class Wolf extends WildAnimal
{
public void hawlAtTheMoon(){
System.out.println(nameOfClass + ": Ouuuuu!!!Ouuuu!!!");
}
}
Cat
Miras alýan synpPet
public class Cat extends Pet
{
public void sleepOnKeyboard(){
System.out.println(nameOfClass + ": Master, stop working!!I wanna sleep on your keyboard");
}
}
YorkshireTerrier
Miras 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. ArrayList
Haý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();
}
}
}
animal
Usuly çagyryp bilemok bark()
ýa-da sleepOnKeyboard()
. Sahypada allAnimals
piş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)
GO TO FULL VERSION