Wątek przeniesiony 2015-05-27 07:05 z Java przez bogdans.

Do czego służy przeciążanie konstruktorów?

0

Witam,

Ogladalem jeden z filmikow na youtube, gdzie byla lekcja o konstruktorach. Człowiek bardzo to ładnie wytłumaczył, jednak ja jako laik mam pytanie. Po co tak w ogóle robi się to przeciążanie. Zauważyłem, że nawet jak nie dokonam przeciążenia czyli usunę fragment:

public Loteria1()
    {
        promień = 1;
    }

To i tak gdy wstawię tutaj:

Loteria1 koło = new Loteria1(6);

jakas cyfre to ona działa w programie. Czy to co usuwam jest w ogóle potrzebne jak bez przeciazenia dziala. Ktos moze laikowi odpowiedziec? Dziękuję.

Kod wyglada tak:

public class Loteria1 
{ 

    double promień;

    public Loteria1()
    {
        promień = 1;
    }
    public Loteria1(double r)
    {
        promień = r;
   }

    public void setPromień (double r)    
    {
        promień = r;
    }    
    public double getPromień ()
    {
        return promień;
    }    

    public double obliczObwodKola()
    {
        return 2*Math.PI*promień;
    }            

    public static void main (String[] args)

    {
        Loteria1 koło = new Loteria1(6);    

System.out.println("Obwód koła o promieniu "  + koło.getPromień() + " wynosi " + koło.obliczObwodKola());

    }

}
0

masz dwa konstruktory,

  1. bez parametrów:

    Loteria1 kolo = new Loteria1();
  2. Z jednym parametrem:

    Loteria1 kolo = new Loteria1(6);

Jeżeli nie używasz tego pierwszego to nie musisz go tworzyć, ty decydujesz jakie i ile konstruktorów chcesz mieć.

Jednak dobrze jak klasa ma konstruktor bezparametrowy, przydaje sie to w refleksjach.

0

Mi chodzi o ten fragment:

    public Loteria1()
    {
        promień = 1;
    }
    public Loteria1(double r)
    {
        promień = r;
   }

Dlaczego musiałem podać tą pierwszą część:

    public Loteria1()
    {
        promień = 1;
    }

skoro nawet jak to wykasuje to i tak wszystko działa. Osoba która to tłumaczyła mówiła coś o przeciążeniach. Ale nie zrozumiałem:
(

0

Przeciążenia "funkcji" polegają na tym, że parę funkcji ma tę samą nazwę ale różnią się znacząco typami. Tzn możesz mieć funkcje:
suma(int, int), suma(float, float), suma(float, int) suma(A, A), itd... i w zależności od typów podanych podczas wywoływania zostanie wywołana odpowiednia metoda.

new Loteria1(6.0);

spowoduje wywołanie konstruktora

 public Loteria1(double r)
    {
        promień = r;
   }

zamiana znaczników <code class="csharp"> na <code class="java"> - @furious programming

0

Pewnie chodzi o to że jeżeli zdefiniujesz klasę pochodną w ten sposób:

public class ExtLoteria extends Loteria1 
{ 
}

to wszystko zadziała jeżeli będziesz miał konstruktor domyślny dla Loteria1,

jeżeli jednak go nie zdefiniujesz program się nie skompiluje. Mając tylko konstruktor public Loteria1(double r), będziesz musiał zmienić definicję ExtLoteria na :

public class ExtLoteria extends Loteria1 
{ 
      public ExtLoteria(double r) {
                super(r);
      }
}

Jednak nie zawsze konstruktor domyślny ma sens.

0

Ok wielkie dzięki za waszą pomoc. Teraz zaczyna mi się to wszystko rozjaśniać

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