猿问

Java 泛型笔试问题?

代码:

public class Pair<T> {

    private T t1;
    private T t2;
    
    public T getT1() {
        return t1;
    }
    public void setT1(T t1) {
        this.t1 = t1;
    }
    public T getT2() {
        return t2;
    }
    public void setT2(T t2) {
        this.t2 = t2;
    }
}

public class User {

    private String name;
    private String sex;
    private Integer age;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

public class  Twins extends Pair<User> {

    @Override
    public void setT1(User t1) {
        if (t1 != null) {
            super.setT1(t1);
        }
    }

    @Override
    public void setT2(User t2) {
        if (t2 != null) {
            super.setT2(t2);
        }
    }
}

问题描述:虚拟机会将 Pair进行类型擦除,擦出后类型变量将替换为 Object,那么 Twins 类重写的方法 void setT1(User t1)void setT2(User t2)中参数会擦出为 Object吗?为什么?

慕少森
浏览 532回答 3
3回答

墨色风雨

父类Pair进行类型擦除,擦出后类型变量将替换为Object,子类 Twins 类重写的方法 void setT1(User t2)及 void setT2(User t2)不会被擦出为Object,但这样参数列表变了,不是重写了,所以子类Twins自动生成了两个方法setT1(java.lang.Object)和setT2(java.lang.Object)方法重写父类两个方法,在里面调用void setT1(User t2)及 void setT2(User t2)这两个方法,所以子类Twins是有四个方法.
随时随地看视频慕课网APP

相关分类

Java
我要回答