What does the following Java code output?
public class GenericExample<T extends Number> {
private T num;
public GenericExample(T num) {
this.num = num;
}
public double square() {
return num.doubleValue() * num.doubleValue();
}
public static void main(String[] args) {
GenericExample<Double> example = new GenericExample<>(2.0);
System.out.println(example.square());
}
}