为什么不能,因为不允许这样做,为啥不允许,想应用就好了。
继承的一个重要目的就是利用向上转型、多态性来解耦合、提高扩展性。
你这个Fu要的是一个int类型的值,那么子类向上转型之后,我调用这个方法就需要得到一个int或者可以当int用的值,而你的子类返回的是一个long,long可以当int用么?当然不行,int可以存入int数组,long可以么~
所以java才规定覆盖方法的返回值必须是原类型或者是其协变返回类型(1.5之后),为啥协变返回类型可以?因为协变返回类型可以当其父类型用,比如父类返回类型为Person,你子类型覆盖方法返回一个Student,向上转型之后,我要求给我一个Person,你给了我一个Student,可以么?可以!因为Student is a Person,Person能干的事儿Student都能干。 |