JavaRush /Blog Jawa /Random-JV /Ngonversi jinis referensi ing basa Jawa
Sant9Iga
tingkat

Ngonversi jinis referensi ing basa Jawa

Diterbitake ing grup
Sugeng siang, wong Javarash. Aku wiwit nampa pitakonan bab casting jinis referensi ing Jawa. Supaya ora nyritakake bab sing padha saben wektu, aku mutusake nulis artikel cekak.

Pisanan, ayo goleki apa jinis casting.

Tipe casting (konversi jinis) yaiku konversi nilai variabel saka siji jinis menyang nilai jinis liyane. Ayo padha ndeleng conto apa iku lan apa sing dipangan. Kita duwe sawetara hirarki kelas ( pirsani Gambar 1 ). Ing kene sampeyan bisa ndeleng kabeh kelas hierarki, sing marisi sapa, lan cara saben kelas. Gambar 1Ana tambahan ngembangaken lan kontrak. Kita weruh yen kelas kasebut Catminangka turunan saka kelas Pet. Pet, minangka penerus kelas Animal. Nalika kita nulis:
Animal animalCat = new Cat();
Animal animalDog = new YorkshireTerrier();
Iki minangka cast ngembangaken (utawa sing implisit). Kita wis ditambahi pranala animalCatlan animalDog. Padha deleng obyek Catlan Dog. Kanthi cast kuwi, kita ora bisa animalCat/animalDognelpon cara liwat link sing ana ing Cat/Dog, nanging ora ing Animal. Cast narrowing (utawa eksplisit) dumadi ing arah ngelawan:
Animal animalCat = new Cat();
Animal animalDog = new YorkshireTerrier();
Cat cat =(Cat)animalCat;
YorkshireTerrier dog = (YorkshireTerrier) animalDog;
Kita wis jelas nuduhake apa jinis kita arep kanggo matak obyek iki. TAPI, ATI-ATI!!! Yen sampeyan nindakake kaya iki:
Animal animalCat = new Cat();
YorkshireTerrier dog = (YorkshireTerrier) animalCat;
compiler bakal skip kode iki. Nanging RunTimebakal mbuwang sampeyan:
Exception in thread "main" java.lang.ClassCastException: Animals.Cat cannot be cast to Animals.YorkshireTerrier
RunTimeweruh sing Catana YorkshireTerrierrong kelas beda. Kanggo ngindhari ClassCastException sajrone nyuda konversi, gunakake instanceof.
Animal animalCat = new Cat();
if (animalCat instanceof YorkshireTerrier)
{
    YorkshireTerrier dog = (YorkshireTerrier) animalCat;
}
Yen animalCatwis YorkshireTerrier, banjur tugas bakal kelakon, yen ora, ora bakal kelakon.

Saiki kenapa iki perlu yen kita kelangan metode lan bisa entuk kesalahan kasebut

Ayo ndeleng kode sing digawe miturut diagram ing Fig. 1 . kelasAnimal
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");
    }
}
Kelas WildAnimalsing warisan sakaAnimal
public abstract class WildAnimal extends Animal
{
    public void steelChicken()
    {
        System.out.println(nameOfClass+": Muhaha,I stole a chicken!");
    }
}
Kelas Petsing warisan sakaAnimal
public abstract class Pet extends Animal
{
    public void peeInTray(){
        System.out.println(nameOfClass + ": Master, I peed");
    }
}
Kelas Foxsing warisan sakaWildAnimal
public class Fox extends WildAnimal
{
    public void eatColobok(){
        System.out.println(nameOfClass + ": I will eat you, Colobok");
    }
}
Kelas Wolfsing warisan sakaWildAnimal
public class Wolf extends WildAnimal
{
    public void hawlAtTheMoon(){
        System.out.println(nameOfClass + ": Ouuuuu!!!Ouuuu!!!");
    }
}
Kelas Catsing warisan sakaPet
public class Cat extends Pet
{
    public void sleepOnKeyboard(){
        System.out.println(nameOfClass + ": Master, stop working!!I wanna sleep on your keyboard");
    }
}
Kelas YorkshireTerriersing warisan sakaPet
public class YorkshireTerrier extends Pet
{
    public void bark(){
        System.out.println(nameOfClass + ": Meow!!! Meow!!!");
    }
}
Mbayangno kahanan. Kita kudu ngumpulake kabeh kewan ing dhaptar siji, menehi feed lan banjur turu. Iki gampang ditindakake yen kita nggawe ArrayListkewan ( Animal). Banjur kita nelpon cara sing cocog kanggo saben kewan:
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();
        }
    }
}
Aku ora bisa animalnelpon cara bark()utawa sleepOnKeyboard(). Amarga sheet allAnimalsngandhut kucing, asu ajag, yorick lan fox, nanging padha suda kanggo Animal. Lan padha mung duwe cara sing ing Animal. Iki apik banget, amarga yen kita bisa nelpon kabeh cara, banjur apa kita kudu asu ajag sing turu ing keyboard, utawa yorick sing nyolong pitik? Matur nuwun kawigatosanipun. Muga-muga artikel iki migunani kanggo sampeyan. Kritik lan komentar ditampa)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION