小编cha*_*_ma的帖子

继承中的方法签名

在下面的代码中

class A {
    public void v(int... vals) {
        System.out.println("Super");
    }
}

class B extends A {
    @Override
    public void v(int[] vals) {
        System.out.println("Sub");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以称之为new B().v(1, 2, 3);//print Sub rather than Super荒谬但确实运作良好.如果我换B

class B {
    public void v(int[] vals) {
        System.out.println("Not extending A");
    }
}
Run Code Online (Sandbox Code Playgroud)

呼叫new B().v(1, 2, 3);将无效.你必须称之为new B().v(new int[]{1, 2, 3});,为什么?

java polymorphism inheritance

7
推荐指数
1
解决办法
231
查看次数

Java泛型方法类型转换

为什么会这样?代码中的一行运行良好,而另一条相似的代码则没有.自动类型转换是否仅在某些条件下发生?我试图将gt.echoV()分配给一个对象,它运行良好; 但是当我将它分配给一个String时,同样的错误将再次出现.

public class GeneMethodTest {

    public static void main(String... args) {
        GeneMethodTest gt = new GeneMethodTest();
        gt.<String>echoV(); //this line works well
        gt.<String>echoV().getClass();//this line leads to a type cast exception                                                          
    }

    public <T> T echoV() {
        T t=(T)(new Object());                                                                    
        return t;
    }
}
Run Code Online (Sandbox Code Playgroud)

java generics

6
推荐指数
1
解决办法
6770
查看次数

标签 统计

java ×2

generics ×1

inheritance ×1

polymorphism ×1