2012-04-01 8 views
0

mein Code wie folgt aus: ich habe zwei Klassen erste Klasse:sich in Generics

public class Box<E> { 

E data1; 

    public Box(E data) { 
     this.data1 = data; 
    } 
    public E getData() { 
     return data1; 
    } 
} 

zweiter Klasse:

public class IntBox extends Box<Integer>{ 

    Integer data; 

    public IntBox(Integer data) { 
     this.data = data; 
    } 

    public Integer getData() { 
     return data; 
    } 
} 

warum diese Klasse erstreckt sich nicht von Box<E>?

+0

Sie haben angegeben, dass es "Box " erweitert, also die Klasse, von der es sich erstreckt. –

Antwort

1

Das wird nicht kompilieren.

Ihre zweite Klasse sollte sein:

public class IntBox extends Box<Integer>{ 
    public IntBox(Integer data) { 
        super(data); 
    } 
} 

Und dann wird es richtig es erweitern und Box Methoden verwenden.

1

Ich würde keine neue Klasse für diesen Zweck erstellen, da die IntBox-Klasse keine Funktionalität zu Box hinzufügt, sondern sie einfach restriktiver macht. Stattdessen würde Box einfach so deklariert, dass Integer verwendet wird. d.h.

public class Foo { 
    public static void main(String[] args) { 
     Box<Integer> intBox = new Box<Integer>(300); 
     System.out.println("data is: " + intBox.getData()); 
    } 
} 
0

Die spätere Klasse erstreckt sich von der ersten generischen Klasse. Das sollten bei diesem Beispiel keine größeren Probleme sein. Stellen Sie nur sicher, dass Sie den Konstruktor der Basisklasse von super (data) aufrufen; im IntBox-Konstruktor.