Wiem, że sformułowanie jest trochę zagmatwane i dziwne, ale proszę o mnie, nie mam pojęcia, jak sformułować to krótko.W języku Java, czy można wywołać konstruktor nadklasy klasy macierzystej przez konstruktor klasy potomnej klasy nadrzędnej?
Powiedzmy, że masz klasę o nazwie SuperBlah
, i odziedziczył go w klasie o nazwie Blah
potem odziedziczył Blah
do klasy o nazwie ChildBlah
(So SuperBlah-Blah-ChildBlah
). Czy słowo kluczowe super();
użyte w konstruktorze ChildBlah
nazywa się konstruktorem SuperBlah
, jeśli Blah
nie ma konstruktora?
Do tych z was, którzy powiedzieli "nie", dlaczego to działa? Mamy klasę o nazwie BlusterBug, która rozszerza klasę Critter i wywołuje super w konstruktorze BlusterBug. Critter nie ma konstruktora, ale klasa, którą rozwija Critter, ma konstruktora. (I celowo pominięto resztę kodu na zajęciach)
public class BlusterCritter extends Critter {
// instance vaiables
private int courageFactor;
private static final double DARKENING_FACTOR = 0.05;
// create a constructor(include what is necesary for parent)
public BlusterCritter(int c)
{
super();
courageFactor = c;
}
Następnie w klasie Critter, że nie ma żadnych konstruktorów!
Ale wtedy klasa Aktor ma konstruktora!
public class Actor
{
private Grid<Actor> grid;
private Location location;
private int direction;
private Color color;
/**
* Constructs a blue actor that is facing north.
*/
public Actor()
{
color = Color.BLUE;
direction = Location.NORTH;
grid = null;
location = null;
}
A najdziwniejsza część? Program działa doskonale, a kompilator nie łapie żadnych błędów! Jak to się dzieje?
Tego rodzaju pytanie najlepiej odpowiedzieć, pisząc klasy z instrukcjami drukowania i testowaniem. Myślę, że możesz uzyskać odpowiedź w mniej niż 30 liniach kodu i możesz nauczyć się wielu szczegółów. – merlin2011
** Każda ** klasa Java ma co najmniej jeden konstruktor. Jeśli nie deklaruje konstruktora, ma domyślny konstruktor, który nie przyjmuje parametrów i zawiera tylko wywołanie 'super();'. –