Impliciete Super Constructor-persoon () is ongedefinieerd. Moet expliciet een andere constructor aanroepen?

Ik werk aan een project en ik krijg de foutmelding “Impliciete Super Constructor-persoon () is ongedefinieerd. Moet expliciet een andere constructeur oproepen” en ik begrijp het niet helemaal.

Hier is mijn persoonsklasse:

public class Person {
    public Person(String name, double DOB){
    }
}

en mijn studentenklasse wanneer u probeert de persoonsklasse te implementeren en het een instructeurvariabele te geven.

public class Student extends Person {
    public Student(String Instructor) {
    }
}

Antwoord 1, Autoriteit 100%

Als een constructeur niet expliciet een superclass-constructeur oproept,
De Java-compiler voegt automatisch een oproep toe aan het no-argument
constructeur van de superclass.

Als de superklasse geen a heeft
No-argument constructor, u krijgt een compileer-tijdfout. Object
heeft zo’n constructeur, dus als het object de enige superclass is,
er is geen probleem.

Referentie: http://docs.oracle.com/javase/ TUTORIAL / JAVA / IANDI / SUPER.HTML :
(Zie onder Sectie ‘Subclass Constructors’)

Dus wanneer het gaat om geparametriseerde constructeurs een super(parameter1, parameter2 ..)Oproep aan de ouderaansluiting.
Ook deze super () oproep moet de eerste regel in uw constructorblok zijn.


Antwoord 2, Autoriteit 16%

U moet een superbellen naar uw gedefinieerde constructeur:

public Student(String instructor) {
    super(/* name */, /* date of birth */);
}

Je kunt niet zomaar super()aanroepen omdat die constructor niet is gedefinieerd.


Antwoord 3, autoriteit 9%

Dit is hoe ik het heb bereikt (in mijn geval was de superklasse Team en de subklasse was Scorer):

// Team.java
public class Team {
    String team;
    int won;
    int drawn;
    int lost;
    int goalsFor;
    int goalsAgainst;
    Team(String team, int won, int drawn, int lost, int goalsFor, int goalsAgainst){
        this.team = team;
        this.won = won;
        this.drawn = drawn;
        this.lost = lost;
        this.goalsFor = goalsFor;
        this.goalsAgainst = goalsAgainst;
    }
    int matchesPlayed(){
        return won + drawn + lost;
    }
    int goalDifference(){
        return goalsFor - goalsAgainst;
    }
    int points(){
        return (won * 3) + (drawn * 1);
    }
}
// Scorer.java
public class Scorer extends Team{
    String player;
    int goalsScored;
    Scorer(String player, int goalsScored, String team, int won, int drawn, int lost, int goalsFor, int goalsAgainst){
        super(team, won, drawn, lost, goalsFor, goalsAgainst);
        this.player = player;
        this.goalsScored = goalsScored;
    }
    float contribution(){
        return (float)this.goalsScored / (float)this.goalsFor;
    }
    float goalsPerMatch(){
        return (float)this.goalsScored/(float)(this.won + this.drawn + this.lost);
    }
}

Antwoord 4

Als u bij het maken van een subklasse-constructor niet expliciet een superklasse-constructor aanroept met super, dan zal Java een impliciete aanroep invoegen in de no-arg “standaard” superklasse-constructor, dwz super();.

Uw superklasse Personheeft echter geen no-arg-constructor. Geef een expliciete no-arg-constructor op in Personof roep expliciet de bestaande superklasse-constructor aan in de Student-constructor.


Antwoord 5

je kunt geen instantie maken zonder een constructor van zijn superklasse aan te roepen. En de jvm weet niet hoe je Person(String, double) moet aanroepen vanuit je Student(String)-constructor.

Other episodes