Avatar billede drinkit Praktikant
03. marts 2014 - 17:07 Der er 12 kommentarer og
1 løsning

Forskellige return type når jeg arver metoder. Hvordan?

Ok. Jeg har to klasser.

class Test {
int a = 23;
void display() { System.out.println(this.a);  }
            }

class ExtendTest extends Test {
String a = "hello world";
            }
Når jeg laver en getter metode som skal returnere a i begge klasser, hvordan går jeg den til det i ExtendTest klassen - Den vil jo kun returnere en int, selvom jeg overrider.

Min lære skriver følgende som tip:

"Remember that a method can return an object of a subtype of the return type due to polymorphism."

Jeg forstår ikke hvad han mener, og har prøvet at søge på google efter forslag.

På forhånd tak (Arne, går jeg ud fra :))
Avatar billede arne_v Ekspert
03. marts 2014 - 17:18 #1
public class Test {
  private int a;
  ...
  public Object getA() {
      return a;
  }
  ...
}

public class ExtendTest extends Test {
  private String a;
  ...
  public Object getA() {
      return a;
  }
  ...
}

boer compile da Object er super klasse for baade Integer og String.
Avatar billede drinkit Praktikant
03. marts 2014 - 17:33 #2
virker ikke. "int" er jo en primitive - går ud fra det er derfor.
Avatar billede drinkit Praktikant
03. marts 2014 - 17:33 #3
og der skal vel også @Override's, ik?
Avatar billede drinkit Praktikant
03. marts 2014 - 17:35 #4
"return type Object is not compatible with int".

Hvordan mener min lære så jeg skal fikse det her?
Avatar billede arne_v Ekspert
03. marts 2014 - 17:45 #5
hmm - den kan saa ikke autoboxe, men skidt pyt:

public class Test {
  private int a;
  ...
  public Object getA() {
      return new Integer(a);
  }
  ...
}
Avatar billede arne_v Ekspert
03. marts 2014 - 17:46 #6
Du kan lave:

public class ExtendTest extends Test {
  private String a;
  ...
  @Override
  public Object getA() {
      return a;
  }
  ...
}

for at angive at det er en override.
Avatar billede drinkit Praktikant
03. marts 2014 - 22:11 #7
Det virker ikke Arne. Den kan ikke returnere Object, selvom jeg laver @Override? Eller overser jeg noget.

public class Test {

    private int a = 23;

    void display() {
        System.out.println(this.a);
    }

    public int getA() {
        return a;
    }
   

}

public class TestExtend extends Test {

    private String a = "hello world";

    @Override
    public Object getA() {
        return a;
    }

}
Avatar billede arne_v Ekspert
03. marts 2014 - 23:12 #8
Laeste du #5 ?
Avatar billede drinkit Praktikant
03. marts 2014 - 23:18 #9
Har også prøvet 5, ja.
Det virkede heller ikke. Har jeg gjort noget forkert så?
Avatar billede arne_v Ekspert
03. marts 2014 - 23:28 #10
Ah - Test getA skal returnere Object ikke int.

Demo:


public class Var {
    public static void main(String[] args) {
        Test o1 = new Test();
        o1.display();
        Test o2 = new TestExtend();
        o2.display();
    }
}

class Test {
    private int a = 23;
    public void display() {
        System.out.println(this.getA());
    }
    public Object getA() {
        return a;
    }
}

class TestExtend extends Test {
    private String a = "hello world";
    @Override
    public Object getA() {
        return a;
    }
}
Avatar billede drinkit Praktikant
03. marts 2014 - 23:47 #11
Tak. Smid svar! Genialt 8) intet mindre. Haha
Avatar billede arne_v Ekspert
03. marts 2014 - 23:53 #12
svar
Avatar billede drinkit Praktikant
04. marts 2014 - 00:47 #13
og tak igen igen .. igen.

vi skrives :)
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