konstruktor w klasie pochodnej

0

jesli dziedzicze po jakiejs klasie, ktora ma konstruktory z argumentami, ale nie ma konstruktora bez-argumentowego to dlaczego nie moge stworzyc w klasie pochodnej konstruktor bezargumentowy?

Przykladowy kod:

 public class Figure {
    private String name;


    float Square(){
        return 0;
    }
    Figure(Figure ob){
        name = ob.name;
    }
    Figure(String n){
        name = n;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 public class Rectangle extends Figure {
    private int a,b;
    Rectangle(String n,int a, int b){
        super(n);
        this.a = a;
        this.b = b;
    }
    Rectangle(Rectangle ob){
        super(ob);
    }
    Rectangle(){          <------------------------------- sprawca całego zamieszania 
        a = 0;
        b = 0;
        setName("none");
    }
    float Square() {
        return a*b;
    }
}
2

Ponieważ ten konstruktor musi się odwołać do któregoś z konstruktorów klasy nadrzędnej. Tu nie ma takiego odwołania.

0

imo dopisz super("someString") w konstruktorze, powinno zadziałać.

1

Sprawa będzie jasna jeśli będziesz pamiętał o następujących rzeczach:

  • każda klasa musi mieć konstruktor,
  • jeśli nie podasz żadnego konstruktora w klasie to kompilator dorzuci pusty publiczny bezparametrowy konstruktor,
  • każdy konstruktor musi na początku albo wywołać inny konstruktor z tej samej klasy za pomocą this(parametry) albo konstruktor klasy nadrzędnej za pomocą super(parametry),
  • jeśli pierwszą linijką w konstruktorze nie będzie ani this(parametry) ani super(parametry) to kompilator doda wywołanie super() o ile w klasie nadrzędnej będzie konstruktor bezparametrowy (widoczny w podklasie) - jeśli nie będzie to wtedy rzygnie błędem,
  • w tym objaśnieniu parametry może oznaczać zero lub więcej parametrów,
1

a, to nie wiem, czemu został skasowany mój post. Pierwszy raz tu piszę, ale co z tego? IMO twórcy wątku chodziło o to by w "sprawcy całego zamieszania" było this("none",0,0);

  • wtedy nie ma żadnego błędu.
    Nie ma sensu wywoływać tu konstruktor nadklasy (choć kompilator nie wyrzuci błędu).

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