浅谈java中的重载和重写的区别

目录
  • 1.重载
    • 小结:
  • 2.重写
    • 小结:
  • 总结

1.重载

重载指在一个类中,具有多个相同名称的方法,他们的参数列表却不相同

(参数类型不同、参数个数不同甚至是参数顺序不同)

重载对返回类型没有要求,可以相同也可以不同,但是不能返回类型来判断他们是否是重载。

例如

package HelloWorld;
public class Zuoye {
	public static void main(String[] args) {
		Zuoye z = new Zuoye();
		z.fangfa1();
		z.fangfa1("张旭");
	}
	public void fangfa1() {
		System.out.println("方法1");
	}
	public void fangfa1(String name) {
		System.out.println("也是方法1,不过有参数"+ name);
	}
}

小结:

1.重载是一个类中多态性的一种表现

2.重载是在一个类中,具有相同名称不同参数列表的方法

3.重载不能根据返回类型的相同或者不同来区分重载函数。

2.重写

1.重写是指在不同类中,将父类的方法在子类中重新写一遍,子类继承了父类原有的方法,但有时又不想继承父类原有一模一样的方法,所以就在返回类型,方法名,参数列表相同的情况下,对方法体进行修改进行重写,这就是重写。但注意的是 子类的访问修饰符不能比父类的更严格(意思就是父类的访问修饰符要更加 严谨,权限更少,父亲严格)

例如

package HelloWorld;
public class Father {
     public static void main(String[] args) {
    	    Son s = new Son();
    	    s.fangfa();
	}
	public void fangfa() {
		System.out.println("我是爸爸的方法");
	}
}
class Son extends Father {
	public void fangfa() {
		System.out.println("我是儿子的方法");
	}
}

返回结果是

小结:

1. 发生在父类和子类关系之间

2. 他们的返回类型,方法名,列表参数相同 方法体不同。

3.子类不能比父类更严格 ,(父亲比儿子严格)。

4重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常

private 最严格。

private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

default (即缺省,什么也不写,不使用任何关键字): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

public : 对所有类可见。使用对象:类、接口、变量、方法

总结重载和重写的区别:

答:方法的重载和重写都是实现多态的方式 ,区别在于重载实现的是编译时的多态性,重写实现的运行时的多态性。

重载是在发生在同一个类中,他们有相同的方法名 ,但有不同的参数列表,重载对返回类型没有特别要求,不能根据返回类型来进行区分 。

而重写发生在不同类中,发生在子类和父类之间的,重写要求子类与父类的被重写方法具有相同的返回类型,名称和参数列表。 但他们的方法体要不同。 同时,父类相较于子类,他的访问修饰符会更加严格,即访问范围更小。比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则) 。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java方法重载和重写原理区别解析

    一.方法重写(0verride) 在Java 程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量. 子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样一种操作方法称为重写,也可以叫覆写或覆盖. 所以,所谓方法的重写是指子类中的方法和父类中继承的方法有完全相同的返回值类型.方法名.参数个数和参数类型.这样就可以实现对父类方法的覆盖. 如果子类将父类的方法重写了,调用的时候肯定是调用被重写过的子类的方法,但是

  • Java中重载与重写的对比与区别

    Java中重载与重写的区别 首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样

  • 浅谈Java中的重载,重写,多态,静态绑定、动态绑定

    本文主要研究的是关于Java中重载,重写,多态,静态绑定.动态绑定的相关内容,具体如下. 重载,英文名是overload,是指在一个类中定义了一个以上具有相同名称的方法,这些方法的参数个数.参数类型和顺序不能相同.返回类型可以相同,也可以不同. public class TstaticOverload { static int height; TstaticOverload() { System.out.println ("Planting a seedling"); height =

  • 深入理解java重载和重写

    目录 重载 1.构造器的重载 2.方法的重载(overload) 重写 区分方法的重载和重写 总结 重载 1.构造器的重载 因为构造器的名字必须与类名相同,所以同一个类的所有构造器名肯定相同,构成重载:为了让系统能区分不同的构造器,多个构造器的参数列表必须不同. class Person{ int age; String name; public Person(){ } public Person(int age){ this.age = age; } public Person(int age

  • Java重写(Override)与重载(Overload)区别原理解析

    这篇文章主要介绍了Java重写(Override)与重载(Overload)区别原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类能够根据需要实现父类的方法. 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常.例如: 父类的一个

  • Java重写与重载之间的区别

    重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类能够根据需要实现父类的方法. 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常.例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOEx

  • 浅谈java中的重载和重写的区别

    目录 1.重载 小结: 2.重写 小结: 总结 1.重载 重载指在一个类中,具有多个相同名称的方法,他们的参数列表却不相同 (参数类型不同.参数个数不同甚至是参数顺序不同) 重载对返回类型没有要求,可以相同也可以不同,但是不能返回类型来判断他们是否是重载. 例如 package HelloWorld; public class Zuoye { public static void main(String[] args) { Zuoye z = new Zuoye(); z.fangfa1();

  • 浅谈Java中static和非static的区别

    关于static和非static变量的区别 1. static 修饰的变量称为类变量或全局变量或成员变量,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存在.非static修饰的成员变量是在对象new出来的时候划分存储空间,是与具体的对象绑定的,该成员变量仅为当前对象所拥有的. 2. static修饰的变量在加载的时候先于main方法加载在内存中的数据共享区-------方法区,而非static的变量在加载的时候,是要创建变量才加载在堆内存中的. 3. 一个stat

  • 浅谈java中为什么重写equals后需要重写hashCode

    一.先看现象 public class TestDemo { public static void main(String[] args) { Person p1 = new Person("阿伦"); Person p2 = new Person("阿伦"); System.out.println(p1.equals(p2)); } static class Person { public Person(String name) { this.name = nam

  • 浅谈Java中的可变参数

    可变参数 可变参数就是一个方法可以接收任意多个参数!例如:fun().fun(1).fun(1,1).fun(1,1,1).你可能认为这是方法重载,但这不是重载,你想想重载能重载多少个方法,而fun()方法是可以传递任何个数的参数,你能重载这么多个方法么? 2.1 定义可变参数方法 public voidfun(int- arr) {} 上面方法fun()的参数类型为int-,其中"-"不是省略号,而是定义参数类型的方式.参数arr就是可变参数类型.你可以把上面代码理解为:public

  • 浅谈Java中各种修饰符与访问修饰符的说明

    JAVA中的类只能是public 或者package的.这是符合逻辑的:人们定义类的初衷就是为了让别人用的.倘若是private,别人怎么调用?但是有一个内部类可以被定义为private.严格上说,内部类,算不得上是一种光明正大的类,内部类在某种意义上是类这个王国里的特务和地下工作者.特务和地下工作者为王国起了不少作用,但是几乎从来不敢在公众场合抛投露面.就算要露面,也要在主人(class)的同意下,向导(Interface)的引导下,才敢战战兢兢的走出来.下面是常规的一些类的修饰符和访问修饰符

  • 浅谈Java中的克隆close()和赋值引用的区别

    学生类Student: package 克隆clone; /*要克隆必须实现这个借口:Cloneable,以标记这个对象可以克隆 Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制. 这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了. */ public class Student implements Cloneable { private String name; private int ag

  • 浅谈java中String的两种赋值方式的区别

    类似普通对象,通过new创建字符串对象.String str = new String("Hello"); 内存图如下图所示,系统会先创建一个匿名对象"Hello"存入堆内存(我们暂且叫它A),然后new关键字会在堆内存中又开辟一块新的空间,然后把"Hello"存进去,并且把地址返回给栈内存中的str, 此时A对象成为了一个垃圾对象,因为它没有被任何栈中的变量指向,会被GC自动回收. 直接赋值.如String str = "Hello&

  • 浅谈Java中向上造型向下造型和接口回调中的问题

    最近回顾了一下java继承中的问题,下面贴代码: public class Base { protected String temp = "base"; public void fun(){ System.out.print("BASE fun()"); } public static void main(String[] args) { Base b =new Base();//实例化Base对象 b.fun(); //调用父类中fun()的方法 System.o

  • 浅谈java中HashMap键的比较方式

    先看一个例子 Integer integer=12344; Integer integer1=12344; 在Java中Integer 和Integer1是不相等的,但是如果再执行如下语句 map.put(integer, 1); map.put(integer1, 2); 会发现2会把1覆盖,问题来了,明明是两个不同的对象,为什么,2会把1覆盖呢? 我们看HashMap中添加键的源代码,如下 可以发现我们传进来的键交给了一个hash的成员方法区处理,这里我们看看hash方法的源码 哦,看到这里

随机推荐