Skip to content
Snippets Groups Projects
Commit 038f076c authored by Lauri Heinonen's avatar Lauri Heinonen :skull:
Browse files

Merge branch 'master' into 'main'

Master

See merge request !2
parents 536c96f2 14584ef8
No related branches found
No related tags found
1 merge request!2Master
Pipeline #64046 passed
......@@ -3,6 +3,9 @@ package fi.utu.tech.ooj.exercise3;
import java.util.Set;
import java.util.TreeSet;
import java.util.Set;
import java.util.TreeSet;
abstract class Ajoneuvo {
private String rekisteriNumero;
......@@ -37,3 +40,4 @@ abstract class Ajoneuvo {
return tmp;
}
}
package fi.utu.tech.ooj.exercise3;
import java.util.Objects;
public class Kirja {
private String kirjanNimi;
private String kirjailijanNimi;
......@@ -35,5 +37,35 @@ public class Kirja {
this.julkaisuVuosi = julkaisuVuosi;
}
public Kirja clone(){
return new Kirja(
kirjanNimi,
kirjailijanNimi,
julkaisuVuosi
);
}
@Override
public String toString() {
return "Kirja{" +
"kirjanNimi='" + kirjanNimi + '\'' +
", kirjailijanNimi='" + kirjailijanNimi + '\'' +
", julkaisuVuosi=" + julkaisuVuosi +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Kirja kirja = (Kirja) o;
return julkaisuVuosi == kirja.julkaisuVuosi && kirjanNimi.equals(kirja.kirjanNimi) && kirjailijanNimi.equals(kirja.kirjailijanNimi);
}
@Override
public int hashCode() {
return Objects.hash(kirjanNimi, kirjailijanNimi, julkaisuVuosi);
}
}
package fi.utu.tech.ooj.exercise3;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class KirjaKokoelma {
......@@ -11,7 +10,7 @@ public class KirjaKokoelma {
public KirjaKokoelma(String kokoelmanNimi) {
this.kokoelmanNimi = kokoelmanNimi;
this.kirjaListaus = new ArrayList<>();
kirjaListaus = new ArrayList<>();
}
public String getkokoelmanNimi() {
......@@ -30,4 +29,36 @@ public class KirjaKokoelma {
kirjaListaus.add(teos);
}
public KirjaKokoelma clone(){
KirjaKokoelma output = new KirjaKokoelma(
kokoelmanNimi
);
for(Kirja kirja : kirjaListaus){
output.lisaaKirja(kirja.clone());
}
return output;
}
@Override
public String toString() {
return "KirjaKokoelma{" +
"kokoelmanNimi='" + kokoelmanNimi + '\'' +
", kirjaListaus=" + kirjaListaus.toString() +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
KirjaKokoelma that = (KirjaKokoelma) o;
return kokoelmanNimi.equals(that.kokoelmanNimi) && kirjaListaus.equals(that.kirjaListaus);
}
@Override
public int hashCode() {
return Objects.hash(kokoelmanNimi, kirjaListaus);
}
}
package fi.utu.tech.ooj.exercise3;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
public class Kirjasto {
private String kirjastonNimi;
private String osoite;
private List<KirjaKokoelma> kokoelmat = new ArrayList<>();
......@@ -57,5 +55,44 @@ public class Kirjasto {
sivukirjastot.add(input);
}
public Kirjasto clone(){
Kirjasto output = new Kirjasto(
kirjastonNimi,
osoite
);
for(Kirjasto kirjasto : sivukirjastot){
output.lisaaSivukirjasto(kirjasto.clone());
}
for(KirjaKokoelma kokoelma : kokoelmat){
output.lisaaKokoelma(kokoelma.clone());
}
return output;
}
@Override
public String toString() {
return "Kirjasto{" +
"kirjastonNimi='" + kirjastonNimi + '\'' +
", osoite='" + osoite + '\'' +
", kokoelmat=" + kokoelmat.toString() +
", sivukirjastot=" + sivukirjastot.toString() +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Kirjasto kirjasto = (Kirjasto) o;
return kirjastonNimi.equals(kirjasto.kirjastonNimi) && osoite.equals(kirjasto.osoite) && kokoelmat.equals(kirjasto.kokoelmat) && sivukirjastot.equals(kirjasto.sivukirjastot);
}
@Override
public int hashCode() {
return Objects.hash(kirjastonNimi, osoite, kokoelmat, sivukirjastot);
}
}
......@@ -2,8 +2,6 @@ package fi.utu.tech.ooj.exercise3;
public class KuormaAuto extends Ajoneuvo{
private int kantavuus;
public KuormaAuto(String rekisteriNumero, String omistaja, int lasti) {
super(rekisteriNumero, omistaja);
this.kantavuus = lasti;
......
......@@ -5,24 +5,51 @@ import java.util.HashMap;
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
/**
* Main class.
*
* @param args Command line arguments
*/
Kirja k1 = new Kirja(
"Kirja 1",
"kirjailija",
2020
);
public static void main(String[] args) {
/*
* Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa.
*/
System.out.println("*** Harjoitustyöpohja käynnistyy ***");
Kirja k2 = new Kirja(
"Kirja 2",
"kirjailija",
2020
);
KirjaKokoelma kokoelma = new KirjaKokoelma(
"hyvät kirjat"
);
Kirjasto turunKirjasto = new Kirjasto(
"Turun pääkirjasto",
"Linnankatu 2"
);
Kirjasto turunKirjastoAuto = new Kirjasto(
"Turun kirjastoauto",
"vaihteleva"
);
Kirjasto salonKirjasto = new Kirjasto(
"Salon pääkirjasto",
"Keskusta"
);
kokoelma.lisaaKirja(k1);
kokoelma.lisaaKirja(k2);
turunKirjasto.lisaaKokoelma(kokoelma);
salonKirjasto.lisaaKokoelma(kokoelma);
turunKirjasto.lisaaSivukirjasto(salonKirjasto);
turunKirjasto.lisaaSivukirjasto(turunKirjastoAuto);
HashSet<Ajoneuvo> ajoneuvot = new HashSet<Ajoneuvo>();
HashSet<HenkiloAuto> henkiloautot = new HashSet<HenkiloAuto>();
HashSet<KuormaAuto> kuormaautot = new HashSet<KuormaAuto>();
System.out.println(turunKirjasto.equals(turunKirjasto.clone()));
System.out.print(turunKirjasto.toString());
}
}
A)
Palautettu lista on tyyppiä "Set<Z>". Metodissa tyyppiparametri "Z" on rajoitettu niin, että se laajenee "Ajoneuvo"-luokan alatyypeiksi.
Tämä tarkoittaa sitä, että kaikki "Ajoneuvo"-luokan alatyypit ovat yhteensopivia tyyppiin "Z". Näin ollen "Set<Ajoneuvo>", "Set<HenkiloAuto>" ja "Set<KuormaAuto>" ovat kaikki yhteensopivia.
B)
Henkilöautot ja kuorma-autot voidaan lisätä ajoneuvot-nimiseen listaan, koska ne perivät Ajoneuvo-luokan.
Tämä on mahdollista, koska periytymisen ansiosta alatyypit ovat yhteensopivia ylätyypin kanssa.
HashSet<Ajoneuvo> ajoneuvot = new HashSet<Ajoneuvo>();
HashSet<HenkiloAuto> henkiloautot = new HashSet<HenkiloAuto>();
HashSet<KuormaAuto> kuormaautot = new HashSet<KuormaAuto>();
// Tämä ONNISTUU
ajoneuvot.addAll(henkiloautot);
ajoneuvot.addAll(kuormaautot);
Kuitenkin, et voi sijoittaa henkiloautot-listaa suoraan ajoneuvot-muuttujaan, koska muuttujan ajoneuvot tyyppi ei ole määritelty polymorfisesti yläluokan Ajoneuvo kanssa.
// Tätä EI voi tehdä
ajoneuvot = henkiloautot;
Jos haluat sijoittaa henkiloautot-listan viittauksen ajoneuvot-muuttujaan, sinun tulee määritellä ajoneuvot-muuttuja siten, että se hyväksyy tyyppirajoituksen.
HashSet<? extends Ajoneuvo> ajoneuvot = new HashSet<Ajoneuvo>();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment