java方法的重载要求与作用,重载与重写的区别

简介: java方法的重载要求与作用,重载与重写的区别

方法的重载Overload:

面向对象中特有的现象:允许定义多个同名方法,参数表不同 ,

参数个数不同

参数类型不同

参数类型的排列不同

形参名不同,不算重载

即:参数列表不同,与返回值类型无关。

方法重载的调用:

编译器会根据传入的实参来匹配类中对应的方法

如果能够精确匹配,就精确匹配;若不能精确匹配,就近向上匹配

但是需避免混淆

为什么要使用方法重载:

比如说人, 有一个吃的方法,参数是馒头,水,药,瓜子食物等等
人类有很多吃的方法,所以会根据吃的不同选择不同的方法参数
如果不用重载,改用多个方法名,例如:

System.out.println(“hello world”)
System.out.println(22)
System.out.println(2.0)
System.out.println()

其实println方法就是定义了多个参数,如果没有重载,那么每次打印都要好好想想自己应该调用哪个方法名了。


方法重载的作用:一个对象的同类方法,由于参数表的不同造成的差异,对用户屏蔽,提高了代码的灵活性。

什么是方法的重写(覆盖)Override:

当父类中定义的方法无法满足子类需求时,子类可以用特殊的方法替换掉父类继承给它的方法,称之为重写(Override)覆盖


在子类中定义了和父类中方法名完全相同的方法就叫覆盖,

当子类覆盖了父类中方法后,子类方法优先

方法覆盖的特点:

  • 子类用特殊的方法实现替换掉父类继承给它的一般的方法实现;
  • 返回值类型 方法名 参数表 都得和父类相同 才能重写
  • 访问修饰符相同或更宽 就可以重写
  • 当返回值类型或参数列表不同时,不是方法覆盖,但是会构成方法重载
  • 当父类的功能不能满足子类的需求时,使用方法覆盖
package test;
/**
 * 1、定义一个台灯类,有一个开灯的方法。
  定义一个灯泡类有个发光的方法,还有两个子类,红灯泡和蓝灯泡,
  两个子类需要覆盖父类的发光方法,红灯泡发红光,蓝灯泡发蓝光。
  写一个Test类,创建台灯类对象,调用开灯方法,
  传入蓝灯泡对象则发蓝光,传入红灯泡则发红光。
 */
public class lt1{
  public static void main(String[] args) {
    //创建台灯对象
    TableLamp t = new TableLamp();
    //创建红灯泡对象
    RedBulb r = new RedBulb();
    t.open(new RedBulb());//红灯泡发红光
    //创建蓝灯泡对象
    BlueBulb b = BlueBulb();
    t.open(b);//蓝灯泡发蓝光
  }
}
class TableLamp{
    /*
    定义一个台灯类,有一个开灯的方法。
     */
  public void open(Bulb bulb){
    bulb.shine();
  }
}
/*
定义一个灯泡类有个发光的方法,还有两个子类,红灯泡和蓝灯泡,
两个子类需要覆盖父类的发光方法,红灯泡发红光,蓝灯泡发蓝光。
 */
class Bulb{
  public void shine(){
    System.out.println("灯泡会发光 ");
  }
}
class RedBulb extends Bulb{
  public void shine(){
    System.out.println("红灯泡发红光");
  }
}
class BlueBulb extends Bulb{
  public void shine(){
    System.out.println("蓝灯泡发蓝光");
  }
}

附:Java中访问修饰符的访问权限:

访问修饰符:(从严到宽)

  • Private 私有的,本类内部 子类不能继承
  • Default 默认的 本类内部+同包 可以访问 同包子类可以继承
  • Protected 受保护的 本类内部+同包+不同包子类 子类可以继承
  • Public 公开的 不受边界约束 子类可以继承
目录
相关文章
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
87 14
|
1月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
68 8
|
2月前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
3月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
3月前
|
Java
Java代码解释静态代理和动态代理的区别
### 静态代理与动态代理简介 **静态代理**:代理类在编译时已确定,目标对象和代理对象都实现同一接口。代理类包含对目标对象的引用,并在调用方法时添加额外操作。 **动态代理**:利用Java反射机制在运行时生成代理类,更加灵活。通过`Proxy`类和`InvocationHandler`接口实现,无需提前知道接口的具体实现细节。 示例代码展示了两种代理方式的实现,静态代理需要手动创建代理对象,而动态代理通过反射机制自动创建。
|
3月前
|
缓存 算法 Java
Java 中线程和纤程Fiber的区别是什么?
【10月更文挑战第14天】
114 0
|
8月前
|
Java 编译器
Java的重载与重写的区别
Java的重载与重写的区别
|
Java 编译器
【面试题精讲】Java重载和重写有什么区别?
【面试题精讲】Java重载和重写有什么区别?
|
前端开发 Java
店铺业务场景分析、BigDecimal是Java提供的一个不变的、任意精度的有符号十进制数对象。它提供了四个构造器,有两个是用BigInteger构造、接口怎么使用的、重载与重写的区别?分别是什么?
店铺业务场景分析 一、协同店铺、竞争店铺极海数据返回给前端数据结构不一样 导入的数据结构 很有可能和自定义采集得到的数据结构不一样
191 1
店铺业务场景分析、BigDecimal是Java提供的一个不变的、任意精度的有符号十进制数对象。它提供了四个构造器,有两个是用BigInteger构造、接口怎么使用的、重载与重写的区别?分别是什么?