关于JAVA继承重写的问题
发布网友
发布时间:2022-05-11 21:59
我来回答
共4个回答
热心网友
时间:2022-04-27 16:12
这是子类重定义从父类继承来的成员方法。
如果参数列表相同则覆盖;否则重载。
你参数列表里定义的参数类型和你定义的方法返回值类型没有关系。(至少在你这个方法中是这个样子的)
再看你的方法,其实你这个double why(int/float)方法并不是继承父类的方法了,是方法的重载,
因为它的返回值类型不同。你把参数去掉的话报错是因为你子类的方法和父类的方法重名了,但又不是覆盖(如果返回值类型一样就是覆盖),这样就导致Java不能唯一识别,所以会报错。
你要想重定义父类的成员方法就要保证它的返回值类型一样。否则不是继承。
如果方法继承并重载以后,父类的引用还可以调用这个方法吗?
————————————————当然可以,如果是重载的话就直接调用;如果是覆盖的话,用super引用。
热心网友
时间:2022-04-27 17:30
你没有弄明白什么叫做重写。你子类中的方法why(int/float)和父类的方法why()是两个不同的方法,子类中的why(int/float)方法并不是从父类继承得到的。
Java编译器判断两个方法相同的根据是两个:方法名和参数列表,并不包括返回值。当这两点都一样时,就认为这两个方法一样,所以当你把子类中的why(int/float)方法参数去掉,那么编译器就认为这个方法是从父类中继承来的(因为方法名和参数与父类的一样),应当是同一个方法,但是返回值却和父类的不一样,所以会报编译错误。
重载就是说一个类中有多个方法的方法名一样,但是参数列表不一样。
重写就是说将父类的方法体的实现在子类中重新编写。重写时,方法原型并不会和父类中的有差异。追问明白了,那第一个问题呢?因为方法的重写允许返回类型是其子类,int和float是不是都是double的子类呢?是不是自动转换就能够说明继承的关系?谢谢
热心网友
时间:2022-04-27 19:05
既然你说了不符合重写规则,那很明显就说明这不是重写了,你只是在子类里面又定义了一个和父类方法名称一样的类,在继承过来父类的方法之后,你子类里面的方法与父类的方法构成了重载
热心网友
时间:2022-04-27 20:56
这是方法的重载