расширение в дженерики - PullRequest
0 голосов
/ 01 апреля 2012

мой код такой: у меня есть два класса первый класс:

public class Box<E> {

E data1;

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

второй класс:

public class IntBox extends Box<Integer>{

    Integer data;

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

    public Integer getData() {
        return data;
    }
}

почему этот класс не расширяется от Box<E>?

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

Я бы не стал создавать новый класс для этой цели, поскольку класс IntBox не добавляет функциональности в Box, а просто делает его более ограничительным.Вместо этого просто объявите Box использовать Integer.т.е.

public class Foo {
   public static void main(String[] args) {
      Box<Integer> intBox = new Box<Integer>(300);
      System.out.println("data is: " + intBox.getData());
   }
}
1 голос
/ 01 апреля 2012

Это не скомпилируется.

Ваш второй класс должен быть:

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

И тогда он будет правильно расширять его и использовать методы Box.

0 голосов
/ 01 апреля 2012

Более поздний класс происходит от первого универсального класса. Это не должно быть больше проблем с этим примером. Просто убедитесь, что вы вызываете конструктор базового класса с помощью super (data); в конструкторе IntBox.

...