java中重载与重写的区别

重载(Overloading)

(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。

重载Overloading是一个类中多态性的一种表现。

(2)Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

例:

public classTest {

public voidsay(){

System.out.println("说");

}

public voidsay(String person1){

System.out.println(person1+"说");

}

public voidsay(String person1,String person2){

System.out.println(person1+"和"+person2+"说");

}

public static voidmain(String[] args) {

Test test =newTest();

test.say();//输出结果为:说

test.say("小明");//输出结果为:小明说

test.say("小明","小红");//输出结果为:小明和小红说

}

}


重写(overriding)

( 1 ) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。

( 2 ) 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

( 3 )子类函数的访问修饰权限不能少于父类的

例:

public classTestOverriding  extends   Test {

public voidsay() {

System.out.println("哈哈哈哈");

}

public static voidmain(String[] agrs) {

Test b =newTestOverriding();

b.say();//结果为:哈哈哈哈

}

}

此时对象b会直接调用子类中的say()方法,这就是方法的重写

总结:

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了,而且如果子类的方法名和参数类型和个数都和父类相同,那么子类的返回值类型必须和父类的相同;如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载。Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回值类型可以相同也可以不同。


Java中的静态绑定和动态绑定

1.静态绑定发生在编译时期,动态绑定发生在运行时

2.使用private或static或final修饰的变量或者方法,使用静态绑定。而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。

3.静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。

4.重载(Overload)的方法使用静态绑定完成,而重写(Override)的方法则使用动态绑定完成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,143评论 18 399
  • 重写和重载区别 重写方法的规则如下: 参数列表:必须与被重写方法的参数列表完全匹配。 返回类型:必须与超类中被重写...
    指尖的跳跃阅读 881评论 0 2
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,298评论 0 62
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 1,308评论 0 5
  • 大部分的人心是关着,但是他不会知道的。也有一些人的心一直开着,他也不会知道的,就像呼吸空气一样,好不自觉,以为大家...
    妙空心灵空间阅读 398评论 0 0

友情链接更多精彩内容