Tutorijali
inheritance u javi og-cs

Java Inheritance (nasljeđivanje)

Java inheritance (nasljeđivanje) je koncept objektno orijentiranog programiranja koji omogućuje jednoj klasi da naslijedi svojstva i metode druge klase.

To znači da klasa koja nasljeđuje drugu klasu dobiva sve metode i varijable koje se nalaze u nadređenoj klasi. Na taj se način omogućuje korištenje već postojećih argumenata i metoda. U novoj klasi definiramo samo svojstva koja su specifična za tu klasu.

Klasa koja nasljeđuje naziva se child class ili podklasa, a klasa iz koje se nasljeđuje se naziva super class, parent class ili nadklasa. Da bismo Javi dali do znanja da je riječ o podklasi koja nasljeđuje svojstva nadklase, koristimo ključnu riječ extends. Naravno, sve će biti jasnije u primjeru.

Java Inheritance (nasljeđivanje) u primjeru

Recimo da želimo kreirati klase kojima ćemo opisati automobil i bicikl.

public class Car {

    void isMoving() {
        System.out.println("This vehicle is moving on a road");
    }

    void isParked() {
        System.out.println("This vehicle is parked in a garage");
    }
}
public class Bike {

    void isMoving() {
        System.out.println("This vehicle is moving on a road");
    }

    void isParked() {
        System.out.println("This vehicle is parked in a garage");
    }
}

U klasama smo opisali entitete iz stvarnog svijeta. Klasa Car opisuje automobil, dok klasa Bike opisuje bicikl. Primijetite da ove klase sadrže potpuno iste informacije. Da bismo spriječili ovakvo ponavljanje koda koje može ići unedogled, koristimo inheritance odnosno nasljeđivanje. Zato ćemo kreirati klasu Vehicle, koja će biti generička klasa za sva vozila.

public class Vehicle {

    // klasa Vehicle je parent class ili nadklasa

    void isMoving() {
        System.out.println("This vehicle is moving on a road");
    }

    void isParked() {
        System.out.println("This vehicle is parked in a garage");
    }
}

Klasa Vehicle sadrži informacije i akcije za sva vozila. Te su informacije i akcije sada u ostalim klasama nepotrebne. Umjesto njih, Javi dajemo do znanja da će klase Car i Bike naslijediti atribute i metode iz klase Vehicle tako što ćemo nakon deklaracije klase dodati ključnu riječ extends.

public class Car extends Vehicle {

    // klasa Car je child class ili podklasa

    boolean isConvertible = true;
    int doors = 4;

    public void drifting() {
        System.out.println("The car is drifting.");
    }
}
public class Bike extends Vehicle {

    // klasa Bike je child class ili podklasa

    String type = "Electric bike";

    public void ringBell() {
        System.out.println("The bike is ringing the bell.");
    }
}

Klase Car i Bike naslijedile su sve informacije iz nadklase. Ujedno smo dodali atribute i metode koje su svojstvene za svaku podklasu: podklasa Car je dobila atribute isConvertible i doors, kao i metodu drifting(). Podklasa Bike je dobila atribut type i metodu ringBell(). Njih možemo koristiti isključivo u podklasama u kojima su kreirani.

Nauči programirati s nama: OG-CS YouTube tutorijali

Funkcionalnost ovog primjera potvrdit ćemo kreiranjem instance svake klase u main metodi.

public class Main {
    public static void main(String[] args) {

        Car car = new Car();
        Bike bike = new Bike();

        // koristimo informacije iz nadklase
        car.isMoving();
        car.isParked();

        // koristimo informacije iz podklase
        System.out.println(car.isConvertible);
        System.out.println(car.doors);
        car.drifting();

        // koristimo informacije iz nadklase
        bike.isMoving();
        bike.isParked();

        // koristimo informacije iz podklase
        System.out.println("This bike is an " + bike.type);
        bike.ringBell();
    }
}

Rezultat pozivanja main metode bit će sljedeći:

// rezultat ispisa iz nadklase za podklasu Car
This vehicle is moving on a road
This vehicle is parked in a garage

// rezultat ispisa iz podklase Car
true
4
The car is drifting.

// rezultat ispisa iz nadklase za podklasu Bike
This vehicle is moving on a road
This vehicle is parked in a garage

// rezultat ispisa iz podklase Bike
This bike is an Electric bike
The bike is ringing the bell.

Kao što vidite, obje podklase su naslijedile informacije iz nadklase. Isto tako, iz rezultata vidimo kako svaka podklasa ima vlastite informacije koje su svojstvene samo njoj i ne mogu se podijeliti s drugim klasama.

Autor

Marko Lubar

Ova stranica koristi kolačiće da bi poboljšalo korisničko iskustvo, više o tome možete saznajte na našoj stranici "politika privatnosti"

Politika privatnosti