关于java子类方法覆盖(Override)父类方法时,该子类方法返回值的问题

书上说在方法覆盖override时,一定要保证返回值的兼容性。允许子类将覆盖方法的返回值类型定义为父类被覆盖方法返回值类型的子类型。我知道在子类中覆盖父类的方法时,子类方法的返回值类型与父类该方法的返回值类型相同肯定不会报错。但下面的代码为什么会错?

class OverRideA
{ private int name; private int age; public OverRideAint n,int a//自定义构造器 { name=n; age=a; } public int getN//返回值类型为int { return age; }
} class OverRideB extends OverRideA
{ private short id; public OverRideBint n,int a { supern,a; id=10; } public short getN//覆盖父类的同名方法,返回值类型为short { return id; }

照理来说short应该是int类型的子类,short应该和int兼容的。但为什么编译器会报错:

引用文字
short应该是int类型的子类,short应该和int兼容的

这句话是有问题的,int和short是primitive type,不是reference type,因此int和short之间没有子类和父类的关系。

都是基础类型啊同志

java方法重写跟重载,跟返回类型是没有关系的,只跟参数类型个数,有关我是这么理解的,
你这种写法,当之类在调用此方法时,虚拟机怎么知道你要调用父类的还是自己的方法,所以基本上编译都是无法通过的

发表评论

电子邮件地址不会被公开。 必填项已用*标注