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:
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