java父子类之间是否存在重载的现象?

java的父子类之间是否存在重载呢?


public class A

{

    public void a(int x){}

}


public class B extends A

{

    public void a(Object x){}

}


public class Main

{

    public static void main(String args[])

       {

           B b = new B() ;

           b.a(2) ;

           b.a(new Object()) ;

       }

}

如果不存在那么对于A和B中的a方法怎么解释呢?


我现在也有点乱了, 大家的观点都不一样...但是大家的意思是这肯定不是父子类之间的重载, 而且有提到覆盖. 我之间学习的过程中, 一直把重载就当作覆盖来看, 但是看样子我的理解是错的, 那么什么是覆盖呢?


开心每一天1111
浏览 677回答 4
4回答

慕的地6264312

关于前两位的回答有以下说明和补充: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){}//参数类型不同}

芜湖不芜

重载只发生在同一类中,你这个即不属于重载,也不属于重写,因为方法名和方法参数确定一个方法。a(int x)和a(Object o)属于两个方法,所以子类B继承了父类A的a(int x)方法。

缥缈止盈

就是重载啊,java继承机制里,子类会开辟空间用来保存继承的父类成员,因为继承过来就和父类不是同一个了。例如B类里的a(int x)方法是和父类不一样的,可以在父类这个方法里打印一下当前类名,当子类调用时显示的会是子类名。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java