(九)java重写和重载

       方法的重载:在一个类中的两个或两个以上的方法,他们方法名相同但是参数列表不同,这种方式称为方法的重载,方法的重载是实现多态性的方式之一。
    参数列表不同指的是参数的个数不同或相同的个数但顺序不同或者类型不同,方法重载时返回值类型可以不同,但是仅仅是返回值类型不同的话不可以。
    java在调用方法的时候,如果精确匹配没有对应的方法,会自动转换匹配相应的方法,例如,如果没有int类型的参数,但是有一个double类型的参数的同名方法,在调用该方法时如果传入int类型的参数,则不会报错,而是把int自动转换成double类型匹配double类型参数的方法。但是,这种情况也只是在精确匹配无法匹配的情况下才会发生,如果存在int类型参数的此方法,传int类型参数时则不会调用double类型的。
    重载的价值在于它允许相关的方法用同一个名字来访问,没有什么规定要求重载的方法之间必须有关系,但是实际上如果真的是没有任何关系的方法就不应该用重载实现,而是应该用新的方法,否则的话就违背了重载的初衷。
    普通方法可以重载,构造方法也一样可以重载。不管是普通方法还是构造方法,里边传递的参数都是既可以是简单类型也可以是对象。简单类型直接传值,而对象传递的则是引用。
    重载遵循“编译期绑定”,即在编译时根据参数确定调用哪一个方法。
    方法的重写:在子类继承父类的时候,子类中与父类方法名和参数列表完全一样,但是其他地方有不同,这种方式叫做重写。重写只发生在继承的时候,如果一个类不能被继承,则也不能被重写。方法的重写也称为方法的覆盖。
    重写遵循两同两小一大的原则,即:方法名相同,参数列表相同;子类抛出的异常要小于或等于父类抛出的异常,并且不能抛出父类没有的异常,子类的返回值类型要小于或等于父类的返回值类型;子类的访问权限要大于或等于父类的访问权限。
    除开上述原则之外,还要知道的是被标识为final的方法不能被重写,不能被继承的方法不能被重写,例如private修饰的方法。
    被子类对象重写过的方法,在程序运行时,根据对象的类型不同(而不是引用类型的不同)来决定调用哪个版本的方法,等号之前的是引用类型,new之后的是对象类型。
    重写遵循“运行时绑定”,即在运行的时候根据引用指向的实际对象类型来决定调用的方法版本。

时间: 2024-12-22 21:38:04

(九)java重写和重载的相关文章

java重写和重载

方法的重载: 在一个类中的两个或两个以上的方法,他们方法名相同但是参数列表不同,这种方式称为方法的重载,方法的重载是实现多态性的方式之一. 参数列表不同指的是参数的个数不同或相同的个数但顺序不同或者类型不同,方法重载时返回值类型可以不同,但是仅仅是返回值类型不同的话不可以. java在调用方法的时候,如果精确匹配没有对应的方法,会自动转换匹配相应的方法,例如,如果没有int类型的参数,但是有一个double类型的参数的同名方法,在调用该方法时如果传入int类型的参数,则不会报错,而是把int自动

java 函数的重载和重写实例代码_java

在java中多态分为两种编译时多态(重载)和运行时多态(重写),编译时多态又叫前绑定,运行时多态又叫后绑定. 下面用一个例子说明: public class OverloadAndOverwrite { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.print("a1.print(a1)

代码-Java的重写和重载函数调用的问题

问题描述 Java的重写和重载函数调用的问题 代码一: class A { public String show(D obj){ return ("A and D"); } public String show(A obj){ return ("A and A"); } } class B extends A{ public String show(B obj){ return ("B and B"); } public String show(

对象-Java中子类重载的问题

问题描述 Java中子类重载的问题 比如我现在又两个具有继承关系的类: 父类:Animal 子类:Dog 在父类中有一个方法eat() 在子类中,除了继承了父类的eat()方法外,我自己还写了一个eat()的重载方法:eat(String a) 然后创建对象: Animal a = new Dog(); 为什么在创建对象a后,调用eat方法时,不能调用eat(String a)方法,而只能调用eat()方法? 解决方案 我是初学者,我说说自己的理解哈.一个是eat(),一个是eat(String

浅谈Java方法的重载_java

方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法,调用时,会根据不用的参数表选择对应的方法 比如 public class Test { void max(int a,int b) { System.out.println(a>b ? a:b); } void max(double a,double b) { System.out.println(a>b ? a:b); } public static void main(String[] args) { Test t = ne

关于java重写paint方法,求大神帮忙

问题描述 关于java重写paint方法,求大神帮忙 我能理解第一段模版函数,然后通过继承和重写方法,代入,为什么第二段代码,不需要带入父类方法,自己就跑起来了了,好像只要把paint重写了,系统自动跑, 还有中间通过屏幕监听的控制关闭的代码看不懂,为什么要这样写,老师说是匿名内部类,求大神讲解 解决方案 4444LJKHJHJHK'HJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJ 解决方案二: 问题1:重新pa

为什么要用java重写logstash

为什么要用java重写logstash  写之前这里先打个广告,java 版本的logstash已经开源,git地址 https://github.com/dtstack,下面进入正题. 一是提升性能:         先说说性能问题,当时袋鼠云的云日志系统日志接收端是ruby 版本的logstash,存储用elasticsearch,前端的展示没有用原生的kibana,而是自己写的一套前端.本人是负者日志接收端的logstash开发,基于ruby版本的logstash写一些满足公司业务的插件,

java 接口-java重写框架中的某个方法

问题描述 java重写框架中的某个方法 有个框架的接口-当然也有框架的方法实现它的所有方法-我在开发过程中-用了实例化了该接口中的类-我现在想重新写框架中方法-必须要写个接口-这个接口继承框架的接口-写个方法来实现这个接口-问题来了-我只重写一个方法-但是现在必须重写所有的方法-得重写500个呢-怎么办-有没有好的办法-我只想重写框架中的某个方法,没有币,谢谢. 解决方案 重写方法不就方法名一样其他某些条件不一样就可以了吗 解决方案二: 1.接口继承后,实现类也继承,只是重写你要的方法 比如 框

java面向对象(四)之重写、重载

重载 定义 重载:在一个类中,存在多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载. 编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析. 注:重载和修饰词.返回值无关,只与参数的个数.类型.顺序有关. 与参数的个数.类型大家都清楚,与顺序有关的例子如下,大家忘了的可以试下 public class Test{ public void sum(int i,String j){ } public