小谈方法重载/overload

本文探讨了Java中的方法重载,如何通过相同的函数名和不同的参数列表实现不同功能。同时,阐述了构造方法的作用,特别是在抽象类和接口中的应用。抽象类用于实现多态,而接口则增强了程序的扩展性。接口不包含构造方法,因为它们代表的是行为而非实体,且接口隐式继承了Object类的所有公共方法。此外,接口并不是Object类的子类,而是独立的概念,它们之间不存在继承关系。
摘要由CSDN通过智能技术生成

        目的:使用同一个方法名,通过传入不同的参数可以实现不同却相似的功能,方便调用者使用。

        条件:在同一个类中,方法名相同、参数列表不同(参数类型(类型、顺序)、数量的不同),与访问修饰符、返回值类型无关。

        例子:print()、构造方法。

        引申的问题:抽象类与接口有无构造方法?

        答:抽象类有构造方法,接口没有构造方法。

        构造方法的作用:实例化对象的过程中,给该对象的实例属性进行初始化。

        原因如下:

                首先要明白为什么会有抽象类、接口的存在,存在的意义是什么?

               抽象类是为了实现程序的多态性(继承extends),所以此时作为抽象类必须将子类的所有共性抽象出来,is-a关系(里氏替换原则),但如果此时有一些新增的类,那么这个抽象类就要考虑对功能扩展的问题,由此可见写一个抽象类的功能虽然广泛,但是代价大。

                那么接口就有了意义,在保留多态的同时,提高了程序的可扩展性(实现implements)。当实现类需要扩展功能时(某种动作、某组动作),只需要通过实现某个接口,被jvm强制去实现接口中的方法就可以了。此时也体现了开闭原则。

                so,宏观来讲:接口:动作,抽象类:对实体类的进一步抽象。动作需要初始化干嘛呢?而且从语法层面,编译器会报错:Interfaces cannot have constructors。而且当子类去创建实例时,会初始化父类,不管父类是不是抽象类,都会调用父类的构造方法。所以此处也解释了抽象类为什么要有构造方法。

        那么此处又可以再引申一个问题:接口(interface)的基类是不是Object?

        答:不是,接口只是隐式调用了Object中所有的公有方法。

        接上一个问题中解释了接口为什么没有构造方法,然后Object类是有构造方法的,所以如果说接口的基类是Object,那么岂不是矛盾了!

         我们再学习静态常量池时,class_info会有一个直接父类的信息,比如接口A

         

        class_info里存放了:A、Object

        但是当接口B去extends(组合)A时,B的class_info信息如下:

          

          

         

         按道理B的class_info里应该只存放了 接口A和接口B,因为存放的时直接父类,但却还有Object类,这就说明了Object不是接口的父类,只是接口隐式调用了Object类中所有的公有方法。

           

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值