Klasy cd. i Konstruktory

Na początku rozwiążmy zadanie dotyczące poprzednich wpisów na temat klas.

Zadanie.

Utwórz nową klasę dla konta bankowego (o nazwie Account).

Utwórz pola dla: numeru kota (account number), salda (balance), imienia klienta ( customer name), e-maila klienta (mail) i numeru telefonu (phone number).

Utwórz settery i gettery dla każdego pola.

Utwórz dwie dodatkowe metody:

  1.  pozwalająca klientowi wpłacać fundusze ( powinna podwyższać saldo);
  2.  pozwalająca klientowi wypłacać fundusze ( powinna odliczać z salda, ale nie pozwalać na całkowitą wypłatę jeśli środki są niewystarczające

Spróbuj utworzyć różny kod w klasie Main (tej tworzonej przez Intellij) do potwierdzenia, że twój kod działa prawidłowo.

Dodaj również jakieś wydruki ( System.out.println’s) w powyższych dwóch metodach do potwierdzenia ile pieniędzy było złożonych na wypłatę.

Moje rozwiązanie:

najpierw tworzymy klasę o nazwie Account:

16.06.4

16.06.5

następnie tworzymy pola w klasie Account:

package com.wordpress.programujeodzera;

public class Account {
    private String number;
    private double balance;
    private String customerName;
    private String customerEmailAddress;
    private String customerPhoneNumber;
    
}

następnie utwórzmy gettery i settery.

Istnieje pewien trik przy tworzeniu setterów i getterów w Intellij. Mianowicie należy kliknąć w oknie Intellij zakładkę Code i kliknąć Generate:

16.06.6

wyświetla się okno:

16.06.7

klikamy w „getter and setter”:

16.06.8

wyświetliło się okno z możliwością zaznaczenia pola lub pól, które mają mieć wygenerowane gettery i settery. Przy pomocy klawisza „Shift” zaznaczam wszystkie pola i klikam ok. Wyświetlają się gotowe settery i gettery:

package com.wordpress.programujeodzera;

public class Account {
    private String number;
    private double balance;
    private String customerName;
    private String customerEmailAddress;
    private String customerPhoneNumber;

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public String getCustomerEmailAddress() {
        return customerEmailAddress;
    }

    public void setCustomerEmailAddress(String customerEmailAddress) {
        this.customerEmailAddress = customerEmailAddress;
    }

    public String getCustomerPhoneNumber() {
        return customerPhoneNumber;
    }

    public void setCustomerPhoneNumber(String customerPhoneNumber) {
        this.customerPhoneNumber = customerPhoneNumber;
    }
}

następnym poleceniem zadania było utworzenie metod dla wpłaty i wypłaty:

package com.wordpress.programujeodzera;

public class Account {
    private String number;
    private double balance;
    private String customerName;
    private String customerEmailAddress;
    private String customerPhoneNumber;

    public void deposit(double depositAmount){
        this.balance += depositAmount;
        System.out.println("Deposit of " + depositAmount + "made. New balance is " + this.balance);
    }

    public void withdrawal (double withdrawalAmount){
        if (this.balance - withdrawalAmount <=0 ){
            System.out.println("Only " + this.balance + "available. Withdrawal not processed");
        } else{
            this.balance -= withdrawalAmount;
            System.out.println("Withdrawal of " + withdrawalAmount + "processed. Remaining balance = " + this.balance);

        }}

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public String getCustomerEmailAddress() {
        return customerEmailAddress;
    }

    public void setCustomerEmailAddress(String customerEmailAddress) {
        this.customerEmailAddress = customerEmailAddress;
    }

    public String getCustomerPhoneNumber() {
        return customerPhoneNumber;
    }

    public void setCustomerPhoneNumber(String customerPhoneNumber) {
        this.customerPhoneNumber = customerPhoneNumber;
    }

żeby sprawdzić czy kod działa (przyjmijmy, że właścicielem jest Bob), należy wejść w klasę Main i wpisujemy:

package com.wordpress.programujeodzera;

public class Main {

    public static void main(String[] args) {
        Account bobsAccount =  new Account();
        bobsAccount.withdrawal(100.0);

        bobsAccount.deposit(50.0);
        bobsAccount.withdrawal(100.0);
        
        bobsAccount.deposit(51.0);
        bobsAccount.withdrawal(100.0);}
}

po uruchomieniu kodu, wyświetla się w oknie konsoli:

16.06.10

jeśli chcemy dodać jakieś wartości, musimy wpisać:

package com.wordpress.programujeodzera;

public class Main {

    public static void main(String[] args) {
        Account bobsAccount =  new Account();
        bobsAccount.setNumber("12345");
        bobsAccount.setBalance(0.00);
        bobsAccount.setCustomerName("Bob Brown");
        bobsAccount.setCustomerEmailAddress("myemail@bob.com");
        bobsAccount.setCustomerPhoneNumber("(54) 233 23 23)");
        bobsAccount.withdrawal(100.0);


        bobsAccount.deposit(50.0);
        bobsAccount.withdrawal(100.0);

        bobsAccount.deposit(51.0);
        bobsAccount.withdrawal(100.0);
    }
}

wpisywanie tych wartości pól zajmuje sporo czasu, dlatego też istnieje inna metoda do zrobienia tego. Mianowicie kiedy tworzymy obiekt po raz pierwszy używając klas możemy posłużyć się konstruktorami. Konstruktorem jest wyjątkowa klasa, która pozwala utworzyć klasę, np. w „new Account()”, „Account()” jest konstruktorem.

Żeby stworzyć konstruktor, wchodzimy do klasy „Account” i wpisujemy:

public class Account {
    private String number;
    private double balance;
    private String customerName;
    private String customerEmailAddress;
    private String customerPhoneNumber;

    public Account(){
        System.out.println("Empty constructor called");
    }

    public void deposit(double depositAmount){
        this.balance += depositAmount;
        System.out.println("Deposit of " + depositAmount + "made. New balance is " + this.balance);
    }

    public void withdrawal (double withdrawalAmount){
        if (this.balance - withdrawalAmount <=0 ){
            System.out.println("Only " + this.balance + "available. Withdrawal not processed");
        } else{
            this.balance -= withdrawalAmount;
            System.out.println("Withdrawal of " + withdrawalAmount + "processed. Remaining balance = " + this.balance);

        }}

        public String getNumber() {
            return number;
        }

        public void setNumber(String number){
            this.number = number;
        }

        public double getBalance() {
            return balance;
        }

        public void setBalance(double balance) {
            this.balance = balance;
        }

        public String getCustomerName() {
            return customerName;
        }

        public void setCustomerName(String customerName) {
            this.customerName = customerName;
        }

        public String getCustomerEmailAddress() {
            return customerEmailAddress;
        }

        public void setCustomerEmailAddress(String customerEmailAddress) {
            this.customerEmailAddress = customerEmailAddress;
        }

        public String getCustomerPhoneNumber() {
            return customerPhoneNumber;
        }

        public void setCustomerPhoneNumber(String customerPhoneNumber) {
            this.customerPhoneNumber = customerPhoneNumber;
        }
    }

uruchamiając teraz w klasie „Main” kod, uzyskujemy:

28.06.1

wyświetlił się nam tekst, zaznaczony poniżej, odnoszący się do tego ,że utworzyliśmy konstruktor bez parametrów. Konstruktory są potrzebne do zainicjowania obiektów, które tworzymy. Spróbujmy utworzyć inny konstruktor z ustawionymi parametrami zamiast używania setterów. Może być więcej niż jeden konstruktor. Żeby to zrobić wracamy do klasy „Account”, najpierw chcemy zainicjować numer konta, więc wpisujemy w parametrach konstruktora na pierwszej pozycji „String number”:

package com.wordpress.programujeodzera;

public class Account {
    private String number;
    private double balance;
    private String customerName;
    private String customerEmailAddress;
    private String customerPhoneNumber;

    public Account(){
        System.out.println("Empty constructor called");
    }

    public Account(String number, double balance, String customerName,String customerEmailAddress,
                   String customerPhoneNumber) {
        this.number = number;
        this.balance = balance;
        this.customerName = customerName;
        this.customerEmailAddress = customerEmailAddress;
        this.customerPhoneNumber = customerPhoneNumber;

    }

    public void deposit(double depositAmount){
        this.balance += depositAmount;
        System.out.println("Deposit of " + depositAmount + "made. New balance is " + this.balance);
    }

    public void withdrawal (double withdrawalAmount){
        if (this.balance - withdrawalAmount <=0 ){
            System.out.println("Only " + this.balance + "available. Withdrawal not processed");
        } else{
            this.balance -= withdrawalAmount;
            System.out.println("Withdrawal of " + withdrawalAmount + "processed. Remaining balance = " + this.balance);

        }}

        public String getNumber() {
            return number;
        }

        public void setNumber(String number){
            this.number = number;
        }

        public double getBalance() {
            return balance;
        }

        public void setBalance(double balance) {
            this.balance = balance;
        }

        public String getCustomerName() {
            return customerName;
        }

        public void setCustomerName(String customerName) {
            this.customerName = customerName;
        }

        public String getCustomerEmailAddress() {
            return customerEmailAddress;
        }

        public void setCustomerEmailAddress(String customerEmailAddress) {
            this.customerEmailAddress = customerEmailAddress;
        }

        public String getCustomerPhoneNumber() {
            return customerPhoneNumber;
        }

        public void setCustomerPhoneNumber(String customerPhoneNumber) {
            this.customerPhoneNumber = customerPhoneNumber;
        }
    }

 

następnie przechodzimy do klasy „Main” i wpisujemy parametry w metodę Account:

package com.wordpress.programujeodzera;

public class Main {

    public static void main(String[] args) {
        Account bobsAccount =  new Account("12345", 0.00, "Bob Brown", "myemail@bob.com", "(54) 233 23 23");



        bobsAccount.withdrawal(100.0);


        bobsAccount.deposit(50.0);
        bobsAccount.withdrawal(100.0);

        bobsAccount.deposit(51.0);
        bobsAccount.withdrawal(100.0);
    }
}

żeby sprawdzić, czy powyższe zmiany działają, wpisujemy w klasie Account :

package com.wordpress.programujeodzera;

public class Account {
    private String number;
    private double balance;
    private String customerName;
    private String customerEmailAddress;
    private String customerPhoneNumber;

    public Account(){
        System.out.println("Empty constructor called");
    }

    public Account(String number, double balance, String customerName,String customerEmailAddress,
                   String customerPhoneNumber) {
        System.out.println("Account constructor with parameters called");
        this.number = number;
        this.balance = balance;
        this.customerName = customerName;
        this.customerEmailAddress = customerEmailAddress;
        this.customerPhoneNumber = customerPhoneNumber;

    }

    public void deposit(double depositAmount){
        this.balance += depositAmount;
        System.out.println("Deposit of " + depositAmount + "made. New balance is " + this.balance);
    }

    public void withdrawal (double withdrawalAmount){
        if (this.balance - withdrawalAmount <=0 ){
            System.out.println("Only " + this.balance + "available. Withdrawal not processed");
        } else{
            this.balance -= withdrawalAmount;
            System.out.println("Withdrawal of " + withdrawalAmount + "processed. Remaining balance = " + this.balance);

        }}

        public String getNumber() {
            return number;
        }

        public void setNumber(String number){
            this.number = number;
        }

        public double getBalance() {
            return balance;
        }

        public void setBalance(double balance) {
            this.balance = balance;
        }

        public String getCustomerName() {
            return customerName;
        }

        public void setCustomerName(String customerName) {
            this.customerName = customerName;
        }

        public String getCustomerEmailAddress() {
            return customerEmailAddress;
        }

        public void setCustomerEmailAddress(String customerEmailAddress) {
            this.customerEmailAddress = customerEmailAddress;
        }

        public String getCustomerPhoneNumber() {
            return customerPhoneNumber;
        }

        public void setCustomerPhoneNumber(String customerPhoneNumber) {
            this.customerPhoneNumber = customerPhoneNumber;
        }
    }

i wówczas po uruchomieniu kodu w klasie Main, otrzymujemy w konsoli:

28.06.2

Możemy również przywołać konstruktor z innego konstruktora:

package com.wordpress.programujeodzera;

public class Account {
    private String number;
    private double balance;
    private String customerName;
    private String customerEmailAddress;
    private String customerPhoneNumber;

    public Account(){
        this("12345",2.50,"Default name", "Default adress", "Default phone");
        System.out.println("Empty constructor called");
    }

    public Account(String number, double balance, String customerName,String customerEmailAddress,
                   String customerPhoneNumber) {
        System.out.println("Account constructor with parameters called");
        this.number = number;
        this.balance = balance;
        this.customerName = customerName;
        this.customerEmailAddress = customerEmailAddress;
        this.customerPhoneNumber = customerPhoneNumber;

    }

    public void deposit(double depositAmount){
        this.balance += depositAmount;
        System.out.println("Deposit of " + depositAmount + "made. New balance is " + this.balance);
    }

    public void withdrawal (double withdrawalAmount){
        if (this.balance - withdrawalAmount <=0 ){
            System.out.println("Only " + this.balance + "available. Withdrawal not processed");
        } else{
            this.balance -= withdrawalAmount;
            System.out.println("Withdrawal of " + withdrawalAmount + "processed. Remaining balance = " + this.balance);

        }}

        public String getNumber() {
            return number;
        }

        public void setNumber(String number){
            this.number = number;
        }

        public double getBalance() {
            return balance;
        }

        public void setBalance(double balance) {
            this.balance = balance;
        }

        public String getCustomerName() {
            return customerName;
        }

        public void setCustomerName(String customerName) {
            this.customerName = customerName;
        }

        public String getCustomerEmailAddress() {
            return customerEmailAddress;
        }

        public void setCustomerEmailAddress(String customerEmailAddress) {
            this.customerEmailAddress = customerEmailAddress;
        }

        public String getCustomerPhoneNumber() {
            return customerPhoneNumber;
        }

        public void setCustomerPhoneNumber(String customerPhoneNumber) {
            this.customerPhoneNumber = customerPhoneNumber;
        }
    }