Avatar billede drinkit Praktikant
26. februar 2014 - 21:03 Der er 8 kommentarer og
1 løsning

Inheritance fejl - constructor?

Når jeg nedarver fra en klasse, har jeg problemer med en fejl, der kommer på constructoren.

Nogle der kan skubbe mig i den rigtige retning?

Billede af fejlmeddelelsen her: www.xup.dk/a.jpg
Avatar billede arne_v Ekspert
26. februar 2014 - 21:24 #1
Student klassens constructor har tilsyneladende argumenter.

PhDStudent arver fra Student.

Naar ikke du laver et eksplcit kald saa antager Java et implicit kald uden argumenter.

Saa PhDStudents constructor skal lave et eksplicit kald med argumenter.
Avatar billede arne_v Ekspert
26. februar 2014 - 21:24 #2
super(..., ..., ..., ...);

som foerste linie i PhDStudent constructor.

Du skal erstatte ... med det rigtige.
Avatar billede drinkit Praktikant
26. februar 2014 - 21:31 #3
de to klasser, Student og PhDStudent har fuldstændig samme constructor - så forstår ikke hvad problemet er.

Forstår ikke helt hvad du mener.
Avatar billede drinkit Praktikant
26. februar 2014 - 21:43 #4
super(name, group, gender, profeciencyInJava, cprNumber);
Avatar billede drinkit Praktikant
26. februar 2014 - 21:43 #5
Det virker. Men forstår det stadig ikke. :)
Avatar billede arne_v Ekspert
26. februar 2014 - 22:32 #6
Har du saa slettet de this.x = x i PhDStudent constructor som allerede er i Student constructor?
Avatar billede arne_v Ekspert
27. februar 2014 - 04:32 #7
Eksempel:


public class OOPFun {
    public static void main(String[] args) {
        C1 o1 = new C1(123, "ABC");
        System.out.println(o1.getI() + " " + o1.getS());
        C2 o2 = new C2(123, 456.789);
        System.out.println(o2.getI() + " " + o2.getX());
    }
}

class P {
    private int i;
    public P(int i) {
        super();
        this.i = i;
    }
    public int getI() {
        return i;
    }
}

class C1 extends P {
    private String s;
    public C1(int a, String s) {
        super(a);
        this.s = s;
    }
    public String getS() {
        return s;
    }
}

class C2 extends P {
    private double x;
    public C2(int a, double x) {
        super(a);
        this.x = x;
    }
    public double getX() {
        return x;
    }
}
Avatar billede drinkit Praktikant
27. februar 2014 - 09:09 #8
public class TAStudent extends Student {
    //By inheriting from Student class, we get all the methods from this class
    //So we dont have to implement them in this class too

    public TAStudent(String name, String group, String gender, int profeciencyInJava, int cprNumber) {
        super(name, group, gender, profeciencyInJava, cprNumber);
    }
}

Det er godt nok smart, at man bare laver super() og pass'er argumenterne til constructoren i super class.

Er det korrekt implementeret i mit tilfælde^^^?

Smid et svar :)
Avatar billede arne_v Ekspert
28. februar 2014 - 04:48 #9
det tror jeg
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester