Gyakorlati alapok III.

Kérdés – Örökli-e származtatott osztály az interfészből „bekapcsolt” metódust?

 

Kérdés – Örökli-e származtatott osztály az interfészből „bekapcsolt” metódust?

Igen és erre nézzünk is egy kvázikomplex példát!

Kiindulási pontjaink az előző fejezetekben megismert IkorTulajdonsagok interfész...

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


...és alaposztályként a Kor1TeruletOsszegzo nevű osztályt használjuk fel, amely implementálta a IkorTulajdonsagok interfészt:

public class Kor1TeruletOsszegzo implements IKorTulajdonsagok{

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

public void osszegzo(){
    double korTeruletOsszeg = 0;
    for(int i = 1; i <= korSzam-10; 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);
    }
}


Az osztály feladata a körterületek kiírása csakis 1 és 10 egység között, valamint a ciklus végén azok összegzése. A kérdés tehát az, hogy a belőle származtatott osztály (Kor2TeruletOsszegzo) örökli-e az interfészből származó tulajdonságokat (metódusokat és adatokat)?

Természetesen, hiszen az interfész kötelező kidolgozásával az már tevékeny része, "teste" lesz az alaposztálynak. Ebből következően az utódosztály létrehozása után (Kor2TeruletOsszegzo extends Kor1TeruletOsszegzo) abban a szülőosztály minden publikus vagy egyéb módon nem védett tulajdonsága elérhető, felhasználható. Éppen ezért elégséges az utódosztály alábbi kidolgozása, amely során az osszegzo() metódus kis módosításával a körterületek 11 és 20 egység között kerültek kiszámításra.

 

Nézzük meg a futtatható Java-kódot:

 

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

 

 

 

 

 

 

 

 

IKorTulajdonsagok.java

 

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

 

Kor1TeruletOsszegzo.java

 

public class Kor1TeruletOsszegzo implements IKorTulajdonsagok{

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

public void osszegzo(){
    double korTeruletOsszeg = 0;
    for(int i = 1; i <= korSzam-10; 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);
    }
}

 

Kor2TeruletOsszegzo.java


public class Kor2TeruletOsszegzo extends Kor1TeruletOsszegzo{

public void osszegzo(){
double korTeruletOsszeg = 0;
for(int i = 11; 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);
    }
}

 

Main.java

public class Main {

public static void main(String[] args) {
    Kor1TeruletOsszegzo kor1TeruletOsszegzo = new Kor1TeruletOsszegzo();
    kor1TeruletOsszegzo.osszegzo();

    System.out.println("\n");

    Kor2TeruletOsszegzo kor2TeruletOsszegzo = new Kor2TeruletOsszegzo();
    kor2TeruletOsszegzo.osszegzo();
    }
}
 

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.5131716320705

11 egység sugarú kör területe: 380.132711084365
12 egység sugarú kör területe: 452.3893421169302
13 egység sugarú kör területe: 530.929158456675
14 egység sugarú kör területe: 615.7521601035994
15 egység sugarú kör területe: 706.8583470577034
16 egység sugarú kör területe: 804.247719318987
17 egység sugarú kör területe: 907.9202768874502
18 egység sugarú kör területe: 1017.8760197630929
19 egység sugarú kör területe: 1134.1149479459152
20 egység sugarú kör területe: 1256.6370614359173
Körterületek összege: 7806.857744170637