有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在泛型类重写中为什么有些类返回空值?请执行以下代码

通用覆盖程序: 类代码:包含genric super和泛型子类,它们将show()作为被重写的ans,试图根据被重写的方法将执行的条件来确定

class GA<T>{
    private T type;
    public GA(){

    }
    public GA(T type) {
         this.type = type;
    }
    public <T> void show(){
        System.out.println("GA:"+this.type);
    }
}
class GB<T> extends GA<T>{
    private T type;
    public GB(T type) {
        this.type = type;
    }

    public <T> void show(T type){
        System.out.println("GB:"+type);
    }
}

public class VarArg {
    public static <T> void show(T... a) {
        System.out.println("Element Length:" + a.length);
        for (T aa : a) {
             System.out.println("Element:" + aa);
        }
    }

    public static void main(String[] args) {
        show(5, 5, 5, 5);
        show(5.2, 5.1, 5.5);
        GA[] arrayStr = {new GA<String>("Str"),new GB<Integer>(10),new GA<Double>(5.5)};
        for(GA ga: arrayStr ){
            ga.show();
        }
        GA<String> str = new GB<String>("H");
        str.show();
    }
}

结果包含GA:null。我不明白它为什么会来

结果:

Element Length:4
Element:5
Element:5
Element:5
Element:5
Element Length:3
Element:5.2
Element:5.1
Element:5.5
GA:Str
GA:null
GA:5.5
GA:null

共 (1) 个答案

  1. # 1 楼答案

    GB中的private T type;实际上是一个与GA中的type不同的字段,因为不可能重写或重新声明子类中超类的字段。现在,在GB的构造函数中,由于没有显式的super(...),因此隐式地调用了超类的默认构造函数,这使得GA.this.type位于null

    此外,类GB中的show方法不会被重写,因为它与GA中的参数列表不同。更重要的是,它永远不会被呼叫到任何地方