Gyakorlati alapok III.

Interfész + öröklődés

 

Hála a Java rendszerprogramozóinak, interfész és öröklődés szintúgy egymással szorosan összekapcsolódó fogalmak. Nézzük meg az ezzel kapcsolatos szabályokat:

A példa kedvéért létrehoztunk egy utód interfészt (IKorBovitettTulajdonsagok), amelyet az ős interfészből (IKorTulajdonsagok) származtattunk (extends):

 

public interface IKorBovitettTulajdonsagok extends IKorTulajdonsagok{
    public void eredmenyKiiras(Object obj);
}

 

Az utód interfész természetesen örökli az ős interfész összes konstansát és metódusfejét, valamint egyetlen újdonsága egy egyszerű eredménykiírás (eredmenyKiiras(Object obj)). Ezt kötelező kidolgoznunk az összes implementáló osztályban, a mostani esetben a KorTeruletOsszegzo és a KorTeruletAtlagolo osztályokban, persze ha már bennük az utód interfészt implementáltuk:

Az új, implementált metódust az osztályok konstruktoraiban hívjuk meg; voltaképpen a System.out.println() metódust cseréljük le vele:

 

KorTeruletOsszegzo(){
    eredmenyKiiras(osszegzo());
};
 

KorTeruletAtlagolo(){
    eredmenyKiiras(atlagolo());
};
 

Nézzük meg a módosított, kibővített, futtatható Java-kódot:

 

www.informatika-programozas.hu - Interfész

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.math.*;

public interface IKorTulajdonsagok {
    double PI = Math.PI;
    int korSzam = 10;
    double korTerulet(int sugar, double PI);
}

 

 

public interface IKorBovitettTulajdonsagok extends IKorTulajdonsagok{
    public void eredmenyKiiras(Object obj);
}

 

 

public class KorTeruletOsszegzo implements IKorBovitettTulajdonsagok{

KorTeruletOsszegzo(){
    eredmenyKiiras(osszegzo());
};

@Override
public double korTerulet(int sugar, double PI){
    return (sugar * sugar) * PI;
}

public double osszegzo(){
    double korTeruletOsszeg = 0;
    for(int i = 1; i <= korSzam; i++){
        int sugar = i;
        korTeruletOsszeg += korTerulet(sugar, PI);
        System.out.println(sugar + " egység sugarú kör területe: " + korTerulet(sugar, PI));
    }
    System.out.print("Körterületek összege: " + korTeruletOsszeg);
    return korTeruletOsszeg;
    }

 

@Override
public void eredmenyKiiras(Object obj) {
    System.out.println(obj);
    }
}

 

 

public class KorTeruletAtlagolo implements IKorBovitettTulajdonsagok{

KorTeruletAtlagolo(){
    eredmenyKiiras(atlagolo());
};

@Override
public double korTerulet(int sugar, double PI){
    return (sugar * sugar) * PI;
}

public double atlagolo(){
    double korTeruletOsszeg = 0;
    for(int i = 1; i <= korSzam; i++){
        int sugar = i;
        korTeruletOsszeg += korTerulet(sugar, PI);
        System.out.println(sugar + " egység sugarú kör területe: " + korTerulet(sugar, PI));
    }
    System.out.print("Körterületek átlaga: " + korTeruletOsszeg / korSzam);
    return korTeruletOsszeg / korSzam;
    }
 

@Override
public void eredmenyKiiras(Object obj) {
    System.out.println(obj);
    }
}

 

 

public class Main {
public static void main(String[] args) {
    new KorTeruletOsszegzo();
    System.out.println();
    new KorTeruletAtlagolo();
    }
}

 

Végeredmény:

1 egység sugarú kör területe: 3.141592653589793
2 egység sugarú kör területe: 12.566370614359172
3 egység sugarú kör területe: 28.274333882308138
4 egység sugarú kör területe: 50.26548245743669
5 egység sugarú kör területe: 78.53981633974483
6 egység sugarú kör területe: 113.09733552923255
7 egység sugarú kör területe: 153.93804002589985
8 egység sugarú kör területe: 201.06192982974676
9 egység sugarú kör területe: 254.46900494077323
10 egység sugarú kör területe: 314.1592653589793
Körterületek összege: 1209.51317163207051209.5131716320705

1 egység sugarú kör területe: 3.141592653589793
2 egység sugarú kör területe: 12.566370614359172
3 egység sugarú kör területe: 28.274333882308138
4 egység sugarú kör területe: 50.26548245743669
5 egység sugarú kör területe: 78.53981633974483
6 egység sugarú kör területe: 113.09733552923255
7 egység sugarú kör területe: 153.93804002589985
8 egység sugarú kör területe: 201.06192982974676
9 egység sugarú kör területe: 254.46900494077323
10 egység sugarú kör területe: 314.1592653589793
Körterületek átlaga: 120.95131716320705120.95131716320705