java父子类之间是否存在重载的现象?
伊谢尔伦
伊谢尔伦 2017-04-18 09:41:34
[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方法怎么解释呢?


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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
PHPz
  • 首先,你提到的这种情况不叫重载,是隐藏(之前有写错成覆盖)

  • 其次,重载的一个定义就是不能“跨域”,显然这两个方法在不同的两个类中

父类的方法在子类中因为有在子类中有重名而不可见,但是父类这个方法仍然存在的,当你使用b对象调用a方法时,它会首先从B类中调用,当B类中不存在对应参数的a方法时,才会想父类查找调用。

你可以试试下面这段代码(会报错),应该有助于你理解重载和覆盖

class B extends A
{
    @Override
    public void a(Object x){
        System.out.println(x);
    }
}
PHPz

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

ringa_lee

覆盖了,你可以在父类中用关键字指明权重

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号