Back Up Next

Preoblaganje in prekrivanje metod

 
Java omogoča, da ima v nekem razredu več metod isto ime, razlikujejo se le v argumentih.
class Enemy             
{
    int posX,posY;
    
    Enemy() {   
        posX=0; posY=0;
    }
    Enemy(int x, int y) {       // preobložen konstruktor
        posX=x; posY=y;
    }
    void move(int x, int y) {   
        posX += x;
        posY += y;
    }
    void move(int x) {  // preobložena metoda 1
        posX=x;
    }
    void move(double x) { // preobložena metoda 2
        posX=(int)x;
    }
    void move() {       // preobložena metoda 3
        posX=posY=0;
    }
}


class Game
{
    public static void main(String argv[ ])   {
        Enemy x = new Enemy();  
        Enemy y = new Enemy(2,3); // klic preobloženega konstruktorja
        double a=1;
        int b=2;

        x.move(3,1);            
        x.move(a);      // klic preobložene metode 2
        x.move(b);      // klic preobložene metode 1
        x.move();       // klic preobložene metode 3

    }
}

Prekrivanje metod



V izvedenem razredu lahko neko metodo prekrijemo z novo metodo z istim imenom in argumenti. 
Za klic metode očeta, lahko uporabimo sintakso super.metoda( ), kot kaže primer.
class Enemy             
{
    int posX,posY;
    
    Enemy() {   
        posX=0; posY=0;
    }
    void move(int x, int y) {   
        posX += x;
        posY += y;
    }
    void move(int x) {  
        posX=x;
    }
}

class Alien extends Enemy {
    void move(int x, int y) { // prekrita metoda 1
        posX = 1+ posX*x;
        posY = 1- posY*y;
    }
    void move(int x) {  // prekrita metoda 2
        super.move(x);  // kličemo metodo razreda "očeta"
        posX = 1+ posX*x;
        posY = 1- posY*y;
    }
}
    
class Game
{
    public static void main(String argv[])   {
        Enemy x = new Enemy();  
        Alien y = new Alien();
        double a=1;
        int b=2;

        x.move(3,1);            
        y.move(3,1);    // klic prekrite metode

    }
}
Back Up Next