java-constructor in de klas kan niet worden toegepast op bepaalde typen

Ik heb 2 subklassen: Personeel, Student
ze behoren tot de superklasse Persoon.

Hier is de code(taken) die door mijn leraar is gegeven:


public class Person
{
   private String name;
   private int yearOfBirth;
   /**
    * Create a person with given name and age.
    */
   Person(String name, int yearOfBirth)
   {
      this.name = name;
      this.yearOfBirth = yearOfBirth;
   }
}

class Student extends Person
{
   private String SID;    // student ID number
   /**
    * Create a student with no parameters.
    */
   Student()
   {
    //task.
   }
}

public class Staff extends Person
{
   private String roomNumber;
   /**
    * Construct a staff member with field values and no pamaeters.
    */
   public Staff()
   {
    //task 
   }
}

Ik weet niet wat ik kan typen om een object zonder parameter te maken.
Het verschijnt altijd een fout als: constructor Persoon in de klas Persoon kan niet worden toegepast op bepaalde typen; vereist: java.lang.String,int;

Ik heb online gecontroleerd of er 2 manieren zijn om het probleem op te lossen:

  1. voeg een standaardwaarde toe aan de superklasse: Person()//without parameter.

    In de subklasse Student:

Student()
  {
  Person astudent = new Student() //I guess.
  }
  1. voeg een super() toe aan de subklasse:
Student()
 {
  super("xxx")//I guess.
 }

Ik weet niet wat ik moet doen. Ik ben een starter in het leren van BlueJ.
Hoop dat iemand mij kan helpen. Heel erg bedankt.


Antwoord 1, autoriteit 100%

Aangezien uw superklasse Persongeen standaardconstructor heeft, moet u in uw subklassen (Studenten Staff) bellen de superklasse-constructor als de eerste instructie.

U moet uw subklasse-constructors als volgt definiëren:

Student() {
    super("a_string_value", an_int_value);// You have to pass String and int values to super class
}

Staff() {
    super("a_string_value", an_int_value); // You have to pass String and int values to super class
}

Antwoord 2, autoriteit 11%

het eerste dat een constructor zal doen, is de constructor (met dezelfde argumenten) van de superklasse aanroepen.
Persoon heeft geen constructor zonder argument, dus u moet uw code op een van de volgende twee manieren wijzigen:

Student(String name, int yearOfBirth)
{
 //task.
}

of

Student()
{
super("", 0);
 //task.
}

en hetzelfde geldt voor Personeel


Antwoord 3, autoriteit 11%

Voeg super(NAME_IN_STRING_TYPE,YEAR_OF_BIRTH_IN_INT_TYPE);toe als eerste statement in de constructor van je subklasse, zoals

Studentenbouwer

Student()
{
super("name", 1970); // String,int arguments passed
 //task.
}

Personeelsbouwer

Staff()
{
super("name", 1970); // String,int arguments passed
 //task.
}

Dit is nodig omdat er geen standaard no-arg-constructor in de basisklasse is. U moet expliciet een no-arg-constructor definiëren in de basisklasse of u moet de compiler opdracht geven om de aangepaste constructor van de basisklasse aan te roepen.

Opmerking: Compiler voegt geen standaard no-arg-constructor toe aan een klasse als deze een door de gebruiker gedefinieerde constructor heeft. Het zal de standaard no-arg constructor alleen toevoegen als er geen constructor gedefinieerd is in de klasse.


Antwoord 4, autoriteit 6%

Probeer dit:

Student(String name, int yearOfBirth) {
   super(name, yearOfBirth);
   // task...
}

Reden: je hebt geen standaardconstructor in je superklasse. Dus je moet super()aanroepen op de eerste positie in je subklasse-constructor.


Antwoord 5, autoriteit 6%

Om een instantie van Studentte construeren, moet u de acties uitvoeren die nodig zijn om eerst Personte maken. Er is maar één manier om Personte construeren – two-arg constructor. Dat betekent dat je Studentmoet veranderen zoals:

public Student() {
    super("someName", 1950); //first values came to my mind
}

Hoewel je moet weten dat Studentzich precies als Personmoet gedragen als hij wordt behandeld als Person, d.w.z. leeftijd en naam hebben. Dus eigenlijk zou ik aanraden om de Student-constructor te wijzigen om daar naam en leeftijd op te nemen.


Antwoord 6

voor constructor no param zou je twee constructors moeten hebben zoals

public class Student {
Student(String name , int dateOfBirth)
{
 super(name,dateOfBirth)
}
Student()
{
 //task.
}
}

ook hetzelfde voor andere klas

Other episodes