• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Klasy w Javie, proszę o sprawdzenie.

Object Storage Arubacloud
0 głosów
308 wizyt
pytanie zadane 11 grudnia 2020 w Java przez fulbi Obywatel (1,010 p.)

Cześć programistyczne świry,

przerabiam tutoriale z Javy i mam pytanie odnośnie klas. Klasa to jakby szablon na obiekty, można w nich przechowywac dane, metody itp. Czy ten kod jest poprawny:

public class Employee {
    String firstName;
    String lastName;
    int birthDate;
    int workExp;

}
public class Company {
    public static void main(String[] args) {
        Employee employee1 = new Employee();
        Employee employee2 = new Employee();
        Employee employee3 = new Employee();

        employee1.firstName="Jaroslaw";
        employee1.lastName="Zelend";
        employee1.birthDate=1928;
        employee1.workExp=66;

        employee2.firstName="Miroslaw";
        employee2.lastName="Zdelmach";
        employee2.birthDate=1998;
        employee2.workExp=2;

        employee3.firstName="Andrzej";
        employee3.lastName="Andrzejewski";
        employee3.birthDate=1988;
        employee3.workExp=6;

        System.out.println(employee1.firstName+" "+employee1.lastName+" "+employee1.workExp+" "+employee1.birthDate);
        System.out.println(employee2.firstName+" "+employee2.lastName+" "+employee2.workExp+" "+employee2.birthDate);
        System.out.println(employee3.firstName+" "+employee3.lastName+" "+employee3.workExp+" "+employee3.birthDate);
    }
}

W klasie Company tworze obiekty emplyee1, 2, 3. Przypisuje im wartości i wyświetlam. W klasie Employee stworzyłem szablon na dane. Poprawnie to napisałem? IDE nie wyświetla błędów. 

Gdybym tworzył auto. To tworze sobie klasę Car, w niej wpisuje dane, rocznik, kolor itp. A w klasie main wywołanie z przypisaniem danych? 

 

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car();
        Car car3 = new Car();

        car1.brand ="Audi";
        car1.model ="A4";
        car1.year =1999;
        car1.kilometer =66;

        car2.brand ="BMW";
        car2.model ="i8";
        car2.year =2020;
        car2.kilometer =2;

        car3.brand ="Dacia";
        car3.model ="Duster";
        car3.year =2020;
        car3.kilometer =6;

        System.out.println(car1.brand +" "+ car1.model +" "+ car1.kilometer +" "+ car1.year);
        System.out.println(car2.brand +" "+ car2.model +" "+ car2.kilometer +" "+ car2.year);
        System.out.println(car3.brand +" "+ car3.model +" "+ car3.kilometer +" "+ car3.year);
    }
}
public class Car {
    String brand;
    String model;
    int year;
    int kilometer;

}

 

1
komentarz 11 grudnia 2020 przez JakSky Stary wyjadacz (14,770 p.)
Tak z ciekawości... Działa Ci ten kod?

Zastanawiam się jakim cudem przypisujesz wartość do pól prywatnych. A może w Javie jest inaczej?

Poza tym wygląda ok. Osobiście do budowy obiektu użyłbym konstruktora ewentualnie jak parametrów jest dużo to wzorca buildera.
1
komentarz 11 grudnia 2020 przez Wiciorny Ekspert (269,710 p.)
public class Employee {
    String firstName;
    String lastName;
    int birthDate;
    int workExp;
 
}

to nie sa prywatne pola, one są defaultowe to jest różnica ma dostęp Pakietowy i klasowy, dla klas w tym samym pakiecie jest dostęp z obiektu 

1 odpowiedź

+1 głos
odpowiedź 11 grudnia 2020 przez Wiciorny Ekspert (269,710 p.)
wybrane 12 grudnia 2020 przez fulbi
 
Najlepsza

Poprawny kod jest, chociaż do ustawiania wartości obiektów warto użyć "setterów"  i do pobrania wartości geterów ?  https://www.w3schools.com/java/java_encapsulation.asp
dlaczego? 

The meaning of Encapsulation, is to make sure that "sensitive" data is hidden from users. To achieve this, you must:

  • declare class variables/attributes as private
  • provide public get and set methods to access and update the value of a private variable


Bo w Javie jak w innych programowaniach obiektowych istotna jest sprawa enkapsulacji danych. Aby dane niepotrzebnie nie były widoczne na zewnątrz, a dostep można metodami publicznymi, stąd zamiast tworzyć defaultowe zmienne, polecam tworzenie ich prywatnych 

public class Employee {
    private String firstName;
    private  String lastName;
    private    int birthDate;
    private   int workExp;
   }

a pobierać je właśnie z użyciem get/ set -> jako ustawienie.
Dalej można by się czepiać wielu rzeczy, ale kod jest poprawny w miare nauki. 
Też jak kolega tutaj wskazał, jeśli generalnie jest jakiś jeden schemat budowy obiektu jak u Ciebie, można ograniczyć się do tworzenia go przez construktor z parametrami  
dodatkowo nawet pokusić się o interfejs, albo  skorzystać dla zaawanoswanych pojęć ze wzorca "kreacyjnego " jakiegoś np. Buildera w ramach jednego obiektu danej klasy czy FactoryBuildera jesli mowa juz o róznych obiektach kilku klas o podobnym sposobie tworzenia  

komentarz 12 grudnia 2020 przez fulbi Obywatel (1,010 p.)

Dziękuje pięknie za wytłumaczenie. Biorę się dalej za naukę bo o części pojęć narazie nie mam pojęcia smiley

1
komentarz 12 grudnia 2020 przez Wiciorny Ekspert (269,710 p.)
prosze, w razie czego pytaj :) nawet zapraszam w wiadomości prywatne jesli tematem jest własnie Java

Podobne pytania

0 głosów
1 odpowiedź 1,208 wizyt
pytanie zadane 25 października 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
1 odpowiedź 1,146 wizyt
pytanie zadane 27 września 2018 w Java przez NIMuser Stary wyjadacz (11,030 p.)
+1 głos
2 odpowiedzi 9,479 wizyt
pytanie zadane 18 listopada 2017 w Java przez Kubs Mądrala (5,190 p.)

92,555 zapytań

141,402 odpowiedzi

319,539 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...