Java Constructors Explained: A Practical Guide to Classes and Overloading
Explore Java dedicated constructors with a practical code example. Learn to declare a class, initialize fields, and create objects.

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