java 同类调用方法_java – 不覆盖超类中类似泛型方法的通用方法 – >使用哪一个?...

本文探讨了一个关于Java中子类方法与父类泛型方法调用的困惑:虽然子类方法不会覆盖父类的泛型方法,但在main方法中调用时,编译器为何不报错。作者解释了编译器如何决定调用哪个方法,并揭示了Java类型系统的工作原理。
摘要由CSDN通过智能技术生成

鉴于这种情况:

public class Animal {

public void genericMethod(T t){

System.out.println("Inside generic method on animal with parameter " + t.toString());

}

}

public class Cat extends Animal {

public void genericMethod(T t){

System.out.println("Inside generic method on cat with parameter " + t.toString());

}

}

public class Main {

public static void main(String[] args) {

Animal animal = new Animal();

Cat cat = new Cat();

cat.genericMethod(cat);

}

}

类Cat中的方法genericMethod()绝对不会覆盖超类方法(并且编译器会抱怨,如果我添加@Override签名)这是合理的,因为对类型T的要求是不同的.

但是我不太明白,编译器如何决定在main方法中调用cat.genericMethod(cat)中使用哪两种方法.因为实际上这两种方法都是可见的并且都适用.我本来期望编译器错误,如“ambigous函数调用”.有人可以解释这种行为吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值