tworzenie klas, konstruktory,dziedziczenie

0

1.Witam mam pewien problem przepisalem przyklad z pewnej ksiazki,
i tu gdzie mamy konstruktor wyglada to tak

Pracownik(String nazw, double pens, String date)
    {
        nazwisko=nazw;
        pensja=pens;
        data=date;
    }

a dane dajemy juz w programie:/

p[0]= new Pracownik("mis jogo", 450.62 , "12 maja 2006");

I moje pytanie jest takie czy jest mozliwosc podawania samemu danych za pomoca JOptionPane.showInputDialog i wstawienie ich do konstruktora??
Na samym dole zrobilem program troszke innaczej czyli tak jak pamietalem zywkladow gdzie podaje wszystkie dane samemu ale nie stworzylem tam konstruktora:/ (jest bez wartosci), a na takim chyba nie zrobie dziedziczenia??

Program z konstruktorem(3 dane):

class Pracownik
{
    private String nazwisko;
    private String data;
    private double pensja;
    Pracownik(String nazw, double pens, String date)
    {
        nazwisko=nazw;
        pensja=pens;
        data=date;
    }

    public String pobierzNazw()
    {
        return nazwisko;
    }
    public String pobierzDate()
    {
        return data;
    }
    public double pobierzPensje()
    {
        return pensja;
    }
    public void podniesPensje(double procent)
    {
        double podwyzka;
        podwyzka=pensja * procent / 100;
        pensja+=podwyzka;
    }
}

public class testPracownika
{
    public static void main(String argv[])
    {
        Pracownik[] p= new Pracownik[3];
        p[0]= new Pracownik("mis jogo", 450.62 , "12 maja 2006");
        p[1]= new Pracownik("joas mik", 261.2 ,  "29 kwietnia 2006");
        p[2]= new Pracownik("adam s", 424 , "7 kwietnia 2006");
        double c=5;
        for(int i=0; i<p.length; i++)
        {
            p[i].podniesPensje(c);
        }

        for(int i=0; i<p.length; i++)
        {
            Pracownik k=p[i];
            System.out.println("Nazwisko " +(i+1)+ " pracownika to " +k.pobierzNazw()+ "\n" 
            +"pensja " +k.pobierzPensje()+ " data " +k.pobierzDate()+ "\n");

            /*System.out.println("Nazwisko " +(i+1)+ " pracownika to " +p[i].pobierzNazw()+ "\n" 
            +"pensja " +p[i].pobierzPensje()+ " data " +p[i].pobierzDate()+ "\n");
            */
        }

    }
}
import javax.swing.*;
class Pracownik
{
    String nazwisko="";
    String data="";
    double pensja;
    public void przypiszNazw(String s)
    {
        nazwisko=s;
    }
    public void przypiszDate(String s)
    {
        data=s;
    }
    public void przypiszPensje(double s)
    {
        pensja=s;
    }
    public String pobierzNazw()
    {
        return nazwisko;
    }
    public String pobierzDate()
    {
        return data;
    }
    public double pobierzPensje()
    {
        return pensja;
    }
    public void podniesPensje(double procent)
    {
        double podwyzka;
        podwyzka=pensja * procent / 100;
        pensja+=podwyzka;
    }
}

public class testPracownika
{
    public static void main(String argv[])
    {
        String s;
        double pe;
        int a;
        s=JOptionPane.showInputDialog(null, "Podaj ilosc pracownikow:");
        a=Integer.parseInt(s);
        Pracownik[] p= new Pracownik[a];
    //  Pracownik g=new Pracownik();
        for(int i=0; i<p.length; i++)
        {
            p[i]=new Pracownik();
            s=JOptionPane.showInputDialog(null, "Podaj nazisko pracownika:");
            p[i].przypiszNazw(s);
            s=JOptionPane.showInputDialog(null, "Podaj nazisko pensje:");
            pe.Double.parseDouble(s);
            p[i].przypiszPensje(pe);
            s=JOptionPane.showInputDialog(null, "Podaj date wyplacenia pensji pracownikowi:");
            p[i].przypiszDate(s);

        }

        double c=5;
        for(int i=0; i<p.length; i++)
        {
            p[i].podniesPensje(c);
        }

        for(int i=0; i<p.length; i++)
        {
        /*  Pracownik k=p[i];
            System.out.println("Nazwisko " +(i+1)+ " pracownika to " +k.pobierzNazw()+ "\n" 
            +"pensja " +k.pobierzPensje()+ " data " +k.pobierzDate()+ "\n");*/

            System.out.println("Nazwisko " +(i+1)+ " pracownika to " +p[i].pobierzNazw()+ "\n" 
            +"pensja " +p[i].pobierzPensje()+ " data " +p[i].pobierzDate()+ "\n");

        }

    }
}
  1. Mam chlolera problem z dziedziczeniem:/ dokladnie nieiwej jak rozroznic klasy ktora jest nadklasa a ktora podklasa. np: mam producenta i produkty, nad klasa sa produkty a podklasa jest producent(bo dziedziczy wlasciwosci produktu) czy na odwrot?? Czytam ta ksiazke ale jakos tego zakapowac niemgoe:/
0
  1. Oczywiście że możesz użyć JOptionPane do wprowadzania danych. Najlepiej jeśli wpiszesz wynik działania JOptinPane do odpowiednich zmiennych (w Twoim przypadku nazw, pens, date) sprawdzisz ich poprawność a następnie wywołasz konstruktor;

  2. Jeśli chodzi o dziedziczenie to Twój przykład klas producenta i produkt(y) nie jest trafiony, gdyż klasy te nie mają cech wspólnych. Oczywiście zachodzi między nimi relacja tzn. prducent produkuje produkty. Przy takiej relacji należałoby w klasie producent umieścić "tablice" obiektów klasy produkt.

Dziedziczenie używane jest wtedy gdy nasza nowa klasa posiada nowe, dodatkowe pola i metody jak również obowiązkowo ma posiada te same pola i metody klasy nadrzędnej (klasy, z której dziedziczy).

0

Jesli dobrze rozumiem to powinienem zrobic cos takiego?

...
public static void main(String argv[])
        {
            String s,d,e;
            double t;
            s=JOptionPane.showInputDialog(null, "Podaj nazwisko");
            d=JOptionPane.showInputDialog(null, "podaj pensje");
            t=Double.parseDouble(d);
            e=JOptionPane.showInputDialog(null, "Podaj date");

                Pracownik[] p= new Pracownik[3];
                p[0]= new Pracownik(s, t, e);
                p[1]= new Pracownik("joas mik", 261.2 ,  "29 kwietnia 2006");
                p[2]= new Pracownik("adam s", 424 , "7 kwietnia 2006");
....

Oczywiscie wszystko bym zrobil w petle aby zapisywal do tablic, czy to natym ma polegac? czy jest mzoe inny sposob, bo tu musze zato zadeklarowac dodatkowe zmiene String s,d,e; double t;

  1. Dziedziczenie to powiedzmy ze mam nadklase osoba i teraz podklase student.
    osoba ma zmiene imie nazwisko adres , a student posiada to wszystko tylko jeszcze zmiena nr. indeksu. No a jeszcze inna podklasa Wykladowca ktora ma zmiene te co osoba+ zmiena stanowisko. -czy to jest dziedziczenie?
0
  1. Lepiej jeśli użyjesz tych zmiennych, bo jeśli użytkownik nic nie wpisze JOptionPane zwróci Ci nulla. Aplikacja się wywali na konwersji nulla na liczbę.

  2. Tak, to jest dziedziczenie.

0

ok dzieki za odpowiedz.
Ale mam jeszcze jedno pytanie chce zrobic projekt na zaliczenie i musze miec:
2 klasy(najmniej), dziedziczenie
Mysle o zrobieniu bazy danych stodentow i wykladowcow
byly by 4 klasy osoba student wykladowca i glowna.
bylo by pole wyboru switch
1 dodaj studenta
2 dodaj wykladowce
3 wyswietl stodentow
4 wyswietl wykladowcow
5 szukaj studenta // albo tylko jedno szukaj no nazwisku
6 szukaj wykladowce /// - || -
7 wyjdz

i co moglibyscie powiedziec o takiej formie zadania i o takich polach wyboru??

0

Jeszcze zmień i usuń

0

ok tylko jak to zrobic?? jakas podpowiedz??
a czy to nie bedzie zle bo nie bede centralnie dawal danych do klasy osoba, tylko do klas student wykladowca?

0
kalvin napisał(a)

ok tylko jak to zrobic?? jakas podpowiedz??
a czy to nie bedzie zle bo nie bede centralnie dawal danych do klasy osoba, tylko do klas student wykladowca?

Moze byc. Klase osoba masz po to, zeby np. nie pisac tych samych metod obslugi imienia i nazwiska itd. A jezeli juz np. dajesz nr PESEL i do tego metode sprawdzajaca poprawnosc to az sie prosi, zeby tego dwa razy nie pisac, tylko dac w nadrzednej.

pozdrawiam
johny

0

ok dzieki wielkie za odpowiedzi

pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0