Java – przykład z konstruktorami
Przykład na dedykowany konstruktor Zadeklaruj klasę Sloik zawierającą pole Dzem dzem, dedykowany konstruktor inicjujący wszystkie zadeklarowane pola i metody: otworz zamknij czyOtwarty Następnie utwórz obiekt klasy Sloik i napełnij go wybranym rodzajem dżemu, operacje powtórz dla wszystkich rodzajów dżemów. Uwaga: nakładanie dżemu do zamkniętego słoika lub pozostawienie słoika nie zamkniętego może prowadzić do zepsucia się
Przykład na dedykowany konstruktor
Zadeklaruj klasę Sloik
zawierającą pole Dzem
dzem, dedykowany konstruktor inicjujący wszystkie zadeklarowane pola i metody:
- otworz
- zamknij
- czyOtwarty
Następnie utwórz obiekt klasy Sloik
i napełnij go wybranym rodzajem dżemu, operacje powtórz dla wszystkich rodzajów dżemów.
Uwaga: nakładanie dżemu
do zamkniętego słoika lub pozostawienie słoika nie zamkniętego może prowadzić do zepsucia się produktu!
Oryginał zadnia
Zadeklaruj klasę Dzem
zawierająca prywatne pola:
- String smak,
- double waga
Utwórz konstruktory przyjmujące jako parametry zmienne:
- (String smak, double waga),
- (double waga),
- (String smak).
Dostarczone parametry konstruktorów powinny znacjonalizować pola klasy. W przypadku gdy konstruktor nie dostarcza niezbędnego parametru należny przyjąć, ze pole smak musi przyjąć wartość “No name”, natomiast waga – 100.0.
Przedstaw wykorzystanie wszystkich konstruktorów tworząc obiekty reprezentujące co najmniej trzy rodzaje dżemów.
Uwaga: należny założyć, ze tylko konstruktor z dwoma parametrami możne przypisać wartości polom klasy.
Zadanie trochę zmodyfikowane
Zadeklaruj klasę Sloik
zawierająca pole Dzem
dzem (lub konstruktor klasy pochodnej), dedykowany konstruktor inicjujący wszystkie zadeklarowane pola i metody:
otworz
zamknij
czyOtwarty
napełnijSloik
Wymagane pola:
- klasa
Dzem
Następnie utwórz obiekt klasy Sloik
i napełnij go wybranym rodzajem Dzem
.
Resources czyli od czego zacząć
- https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html o konstruktorach na stronie Oracle Java.
- https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html argumenty w konstruktorach.
class Programming { //constructor method Programming() { System.out.println("Constructor method called."); } public static void main(String[] args) { Programming object = new Programming(); // Creating an object } }
class Language { String name; Language() { System.out.println("Constructor method called."); } Language(String t) { name = t; } public static void main(String[] args) { Language cpp = new Language(); Language java = new Language("Java"); cpp.setName("C++"); java.getName(); cpp.getName(); } void setName(String t) { name = t; } void getName() { System.out.println("Language name: " + name); } }
class GrandParent { int a; GrandParent(int a) { this.a = a; } } class Parent extends GrandParent { int b; Parent(int a, int b) { super(a); this.b = b; } void show() { System.out.println("GrandParent's a = " + a); System.out.println("Parent's b = " + b); } } class Child { public static void main(String[] args) { Parent object = new Parent(8, 9); object.show(); } }
Czyli w naszym zadaniu mamy kilka konstruktorów Dzem
Dzem(String smak, double waga) { this.smak = smak; this.waga = waga; } Dzem(double waga) { this.smak = "Nieznany"; this.waga = waga; } Dzem(String smak) { this.smak = smak; this.waga = 100.0; } Dzem() { smak = "no name"; waga = 100.0; }
oraz kilka konstruktorów Sloik
Sloik() { System.out.print("Konstuktor Słoik(): "); this.print(); } Sloik(Dzem p_dzem) { System.out.print("Konstuktor Słoik(Dzem): "); // sprawdzemnie czy dzem jest otwarty this.otworz(); // napeĹ‚nienie dzemem this.napelnij(p_dzem); this.print(); this.dzem.print(); }
Inicjalizacja konstruktora Dzem
następujące “jawnie”
przeciążenie (overloading) napelnij() Sloik
klasa Dzem
package dzem; /** * Exercises Java PPJ-19c * * @author */ public class Dzem { private String smak; private Double waga; void setSmak(String smak) { this.smak = smak; } void setWaga(double waga) { this.waga = waga; } public String get_smak() { return this.smak; } public Double getWaga() { return this.waga; } Dzem(String smak, double waga) { this.smak = smak; this.waga = waga; } Dzem(double waga) { this.smak = "Nieznany"; this.waga = waga; } Dzem(String smak) { this.smak = smak; this.waga = 100.0; } Dzem() { smak = "no name"; waga = 100.0; } void print() { System.out.print("Smak dzemu: " + this.smak + ", waga dzemu: " + this.waga + "kg\n"); } /** * @param args * the command line arguments */ public static void main(String[] args) { // TODO code application logic Dzem d1 = new Dzem("agrestowy", 1111.11); d1.get_smak(); d1.print(); Dzem d2 = new Dzem("porzeczka"); d2.print(); Dzem d3 = new Dzem(1111.11); d3.print(); Sloik s1 = new Sloik(d2); s1.czyOtwarte(); s1.otworz(); s1.czyOtwarte(); s1.napelnij("truskawkowy", 10); s1.zamknij(); s1.napelnij("gruszkowy", 5); } } class Sloik { Dzem dzem = new Dzem(); boolean otwarty; boolean otworz() { if (!czyOtwarte()) { System.out.print("Otwierma słoki dzemu: " + this.dzem.get_smak() + "\n"); } else { System.out.print("Nie ma potrzeby otwierania słoika dzemu: " + this.dzem.get_smak() + " jest już otwarty!\n"); } return otwarty = true; } boolean zamknij() { return otwarty = false; } boolean czyOtwarte() { if (otwarty == true) { System.out.print("Słoki dzemu: " + this.dzem.get_smak() + " jest otwarty\n"); } else { System.out.print("Słoik dzemu: " + this.dzem.get_smak() + " jest zamkniety\n"); } return otwarty; } boolean napelnij(String smak, double waga) { if (czyOtwarte()) { dzem.setSmak(smak); dzem.setWaga(waga); System.out.println("Napełniam słoik dzemem o smaku " + smak + " i wadze " + waga + "kg\n"); } else { System.out.println("Słoik jest zamknięty nie można go napełnić\n"); return otwarty = false; } return otwarty; } // przeciązenie naepłnij() -> nepełnij słoik dzemu klasą Dzem boolean napelnij(Dzem p_dzem) { if (czyOtwarte()) { System.out.println("Słoik " + p_dzem.get_smak() + " jest otwarty."); } else { System.out.println("Słoik jest zamknięty nie można go napełnić\n"); return otwarty = false; } return otwarty = true; } void print() { System.out.println("Słoik dzemu " + this.dzem.get_smak() + " o wadze " + this.dzem.getWaga() + "kg."); } Sloik() { System.out.print("Konstuktor Słoik(): "); this.print(); } Sloik(Dzem p_dzem) { System.out.print("Konstuktor Słoik(Dzem): "); // sprawdzemnie czy dzem jest otwarty this.otworz(); // napełnienie dzemem this.napelnij(p_dzem); this.print(); this.dzem.print(); } }
Online
Kompilator online: http://tpcg.io/XWuGkR