关于java重写的问题

将下列哪个代码放入程序中标注的【代码】处将导致编译错误。答案是B(PS:谁能告诉我这是怎么回事)

A.public float getNum(){return 4.0f;}

B.public void getNum(){}

C.public void getNum(double d){}

D.public float getNum(float d){return 4.0d;}

class A{
public float getNum(){
return 3.0f;}}
public class B extends A{
        【代码】}

洋妞honey
浏览 1837回答 3
3回答

天启之魂

答案是bA没问题,是函数的重写C没问题,是一个B类的特有函数,也可以算是getNum()方法的重载D,没问题,同CB编译错误,因为看参数列表和父类的getNum方法形成了重写,但是返回值类型不同,造成了调用的不确定性(就是虚拟机需要调用getNum时,只看参数列表,所以,无法判断该调用哪一个),所以编译失败

前进的骚年

答案是B,D。B既不是重写也不是重载,重写需要一样的返回值类型和参数列表,访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private);重载:必须具有不同的参数列表;  可以有不同的返回类型,只要参数列表不同就可以了;  可以有不同的访问修饰符;把其看做是重载,那么在java中是不能以返回值来区分重载方法的,所以b不对.D定义返回类型为float,但实际返回的是double类型

叫我官人0

答案应该是d吧,返回类型不一致,需要强转;这种最好自己敲一下
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java