4 回答
TA贡献1817条经验 获得超6个赞
关于前两位的回答有以下说明和补充:
1.首先这不叫覆盖(Override)。类B继承了类A的方法a,且类B定义了一个新的方法a,两个方法参数不同,所以是两个不同的方法。
2.是否是重载(Overload)仍存在争论。
观点一:是重载,是发生在同一类中的重载。
【继承来的属性和方法尽管是隐式的,但仍是类B的属性和方法。】所以类B有两个方法,包括继承自a的方法,属于重载。
观点二:不是重载,重载只发生在同一类中,而类B继承类A方法的途径是通过查找调用(如上)。
、、、话说还有觉得是跨类重载的、、、但是这个和定义矛盾哈、、、
综上,此问题争议较多,个人比较倾向于观点一,【】内容来自baidu,下面是运行结果及代码。
关于覆盖和重载的区别:
1.覆盖,又称重写(Override)。发生在子类与父类之间。
子类是可以继承父类的某些方法的,当父类的方法对子类不适用时,需要在子类中写一个和父类一样的方法(当然方法内的程序块是不一样的),此处“一样”指方法名必须一样、返回值类型互相兼容、参数个数顺序类型必须一致等等。此时如果子类要用这一方法,就会直接调用覆盖过的方法,而当没有检测到重写时,才会调用从父类继承下来的方法。
举我学习时的例子:
因为不同动物的叫声和食物都不同,所以要将父类中的方法覆盖掉。
2.重载(Overload)。一般发生在同一类的不同方法间。
重载要求两个方法返回类型一样,方法名一样,参数列表不一样(类型、顺序、个数等)。
这样两个方法间互为不同的方法,调用哪一个时由参数决定。
举例:
class A{
void a(int i, float j){}
void a(float i, int j){}//两个方法接收的参数类型顺序不同,所以是两个不同的方法
}
class B{
void b(int i){}
void b(){}//参数个数不同,第二个方法无参数
}
class C{
void c(int i){}
void c(float i){}//参数类型不同
}
TA贡献1796条经验 获得超7个赞
TA贡献2041条经验 获得超4个赞
就是重载啊,java继承机制里,子类会开辟空间用来保存继承的父类成员,因为继承过来就和父类不是同一个了。例如B类里的a(int x)方法是和父类不一样的,可以在父类这个方法里打印一下当前类名,当子类调用时显示的会是子类名。
添加回答
举报