/* * Olio-ohjelmoinnin perusteet I, Jorma Laurikkala. * * Myöhäistä sitomista: Java-tulkki tutkii mikä olio viitteeseen liittyy * ja kutsuu dynaamisen (olion) luokan selvittyä metodin oikeata versiota. * Tämä sillä edellytyksellä, että metodikutsu on kieliopillisesti oikein * staattisen (viitteen) luokan vinkkelistä. * * Jorma Laurikkala (jorma.laurikkala@tuni.fi). * * Viimeksi muutettu 22.1.2020. * */ public class SitovaTesti { public static void main(String[] args) { // Luodaan kissa ja ihminen ja asetetaan heihin viitteet dynaamisista // (olioiden) luokista. Kissa kissa = new Kissa(); Ihminen ihminen = new Ihminen(); // Asetetaan olioihin myös nisäkäsmäiset viitteet. Nisakas kissanisäkäs = kissa; Nisakas ihmisnisäkäs = ihminen; /* * Syö-metodia voidaan kutsua nisäkäsmäisten viitteiden kautta, koska syöminen * on eräs nisäkkäiden piirteistä. Näytölle tulostuu tarkennettua syömistä, * koska metodi on korvattu molemmissa luokissa. * */ // Syön kuin kissa... // murr, murrrr... kissanisäkäs.syö(); // Syön kuin ihminen... // Seli, seli, seli... ihmisnisäkäs.syö(); /* * Moikkaa-metodin kutsu ei kelpaa Java-kääntäjälle vaikka tulkki osaisi sitoa * kutsun oikein, koska tervehtiminen ei ole nisäkkään piirre. Kissa ja ihminen * toteuttavat moikkaa-metodin ja oikean tyyppisiä viitteitä käyttäen * ohjelma kääntyy ja tervehtiminen onnistuu. * */ // Nämä kutsut eivät käänny, koska eläin ei osaa tervehtiä. //kissanisäkäs.moikkaa(); //ihmisnisäkäs.moikkaa(); // Miu! Pusken jalkaa... kissa.moikkaa(); // Moikka! ihminen.moikkaa(); } }