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:
-
voeg een standaardwaarde toe aan de superklasse:
Person()//without parameter
.In de subklasse Student:
Student()
{
Person astudent = new Student() //I guess.
}
- 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 Person
geen standaardconstructor heeft, moet u in uw subklassen (Student
en 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 Student
te construeren, moet u de acties uitvoeren die nodig zijn om eerst Person
te maken. Er is maar één manier om Person
te construeren – two-arg constructor. Dat betekent dat je Student
moet veranderen zoals:
public Student() {
super("someName", 1950); //first values came to my mind
}
Hoewel je moet weten dat Student
zich precies als Person
moet 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