首页 > 编程语言 >Java方法重写与重载

Java方法重写与重载

时间:2024-02-19 12:00:10浏览次数:27  
标签:Java 子类 方法 重载 父类 重写 public

一、方法重载(overload)

概念 方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载   多个方法在同一个类中   多个方法具有相同的方法名   多个方法的参数不相同,类型不同或者数量不同   所谓方法重载就是指我们可以定义一些名称相同的方法,通过定义不同的参数来区分这些方法,然后再调用时,Java虚拟机就会根据不同的参数列表来选择合适的方法执行。也就是说,当一个重载方法被调用时,Java用参数的类型或个数来决定实际调用的重载方法。因此,每个重载方法的参数的类型或个数必须是不同。   注意 重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式   重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载   示例代码
public class MethodDemo {
public static void fn(int a) {
    //方法体
    }
    public static int fn(double a) {
    //方法体
    }
}


public class MethodDemo {
public static float fn(int a) {
    //方法体
    }
    public static int fn(int a , int b) {
    //方法体
    }
}
 

二、方法重写(0verride)

概念 由于类与类的继承关系,使得子类具有父类的属性和方法,此时子类具有父类所有特征,还可以在子类中重新定义,以及追加属性和方法。   所谓方法重写就是子类出现了和父类中一模一样的方法声明(方法名一样,参数列表也必须一样)。   方法重写的应用场景 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容 。   示例代码
public class Animal {
    public void eat() {
        System.out.println("动物吃东西");
    }
    
    void jump() {
        System.out.println("动物可以跳高");
    }
}


public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }


    @Override
    public void jump() {
        System.out.println("猫一蹦蹦三米");
    }
}
  @Override注解 限定某个方法,是重写父类方法,该注解只能用于方法,起到检验作用   @Override表示指定重写父类的方法,如果写了@Override注解,子类写了父类没有的方法则报错   如果不写@Override注解,而子类写了父类的方法,任然构成重写   @Override只能修饰方法,不能修饰其他类,包,属性等   注意 私有方法不能被重写(父类私有成员子类是不能继承的)   子类方法访问权限不能更低(public > 默认 > 私有)    示例代码
public class Fu {
    private void show() {
        System.out.println("Fu中show()方法被调用");
    }


    void method() {
        System.out.println("Fu中method()方法被调用");
    }
}


public class Zi extends Fu {
    /* 编译【出错】,子类不能重写父类私有的方法*/
    @Override
    private void show() {
        System.out.println("Zi中show()方法被调用");
    }
   
    /* 编译【出错】,子类重写父类方法的时候,访问权限需要大于等于父类 */
    @Override
    private void method() {
        System.out.println("Zi中method()方法被调用");
    }


    /* 编译【通过】,子类重写父类方法的时候,访问权限需要大于等于父类 */
    @Override
    public void method() {
        System.out.println("Zi中method()方法被调用");
    }
}

三、重写与重载区别

方法重载:  1、同一个类中  2、方法名相同,参数列表不同(参数顺序、个数、类型)  3、方法返回值、访问修饰符任意    方法重写:  1、有继承关系的子类中  2、方法名相同,参数列表相同(参数顺序、个数、类型),子类<=父类的方法返回值 3、访问修饰符,访问范围需要大于等于父类的访问范围         

标签:Java,子类,方法,重载,父类,重写,public
From: https://www.cnblogs.com/liyunxi/p/18020782

相关文章

  • java普通项目转springboot项目
    添加启动类@SpringBootApplicationpublicclassSpringBootMain{publicstaticvoidmain(String[]args){SpringApplication.run(SpringBootMain.class,args);}}添加依赖<parent><groupId>org.springframework.boot</grou......
  • java 日期计算
      importjava.util.Calendar;publicclassMain{publicstaticvoidmain(String[]args){//创建一个Calendar对象并设置为当前时间Calendarcalendar=Calendar.getInstance();//获取当前年份、月份和日期inty......
  • 一位普通Javaer的成长之路
    前言此文章用于记录自己作为Java开发者的成长历程永远置顶于我的博客为什么要做Java其实本来是想学C#做桌面应用程序的,奈何Java的火热和易上手,加上好找工作些,所以入行了Java当然,也不影响我现在偶尔会学学C#,做windows下的桌面应用程序以《斗破苍穹》的斗气段位来代表计算机专......
  • JAVA基础-正则表达式
    1,正则表达式  正则表达式,又称规则表达式,(RegularExpression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用......
  • JAVA基础-类的成员
    1.类的成员-属性属性这里就是成员变量,也叫成员变量,直接定义在类中的。在方法体外声明的变量称之为成员变量实例变量(不以static修饰)类变量(以static修饰)在方法体内部声明的变量称之为局部变量形参(方法、构造器中定义的变量)方法局部变量(在方法体内定义)代码块变量(在代码......
  • JAVA基础-内存与垃圾回收
    1,运行时数据区1,程序计数器线程私有。生命周期:生命周期与线程同步。作用:它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。特点:它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域,唯一没有OutofMemory......
  • JAVA基础-IO
    1,IO概念IO通常表示计算机与外界数据的输入与输出。I/O流:IO流又叫输入输出流,输入和输出均是以内存作为参照物分类:1)按照流的方向以内存为参考物,往内存中去,叫做输入,从内存中出来,叫做输出。2)按照读取数据方式字节流,一次读取一个字节byte字符流,一次读取一个字符,具体几个......
  • JAVA基础-SPI
    1,什么是SPISPI全名ServiceProviderinterface,翻译过来就是“服务提供接口”,再说简单就是提供某一个服务的接口,提供给服务开发者或者服务生产商来进行实现。JavaSPI是JDK内置的一种动态加载扩展点的实现。这个机制在一般的业务代码中很少用到(个人接触到的业务没有用到过),但是......
  • JAVA基础-反射
    1,什么是反射?  Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态(或准动态,为啥要说是准动态,因为一般而言的动态语言定义是程序运行时,允许改变程序结构或变量类......
  • JAVA基础-泛型
    1,泛型概述泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型......