重载和重写的区别

前言

重载:是发生在同一个类里,方法名相同,功能类似,参数不同的一系列方法叫做方法的重载。
重写:是发生在子类里的,子类中定义了一个与父类方法名、返回值、参数都完全一致的方法,被称为方法的重写。

一、重载

  • 方法名和返回值类型相同
  • 传入 参数的顺序、个数、类型不同
    拿一个类的构造方法重载示例:
class Product{//类
	//Product类的构造方法重载
	public Product(){
		
	}
	public Product(int x) {
		
	}
	public Product(String a) {
		
	}
	public Product(String a,int x) {
		
	}
	public Product(int x,String a) {
		
	}
}

其他方法一样可以重载

二、重写@Override

  • 子类中定义一个与父类 方法名、返回值类型、传入的参数完全一致的方法,叫重写,也称 覆写 覆盖;有任何不同,都不是重写。
class Personx{//父类
	public void run() {
		System.out.println("这是父类的一个run()方法");
	}
	
}
class Student extends Personx{//子类
	//对父类方法run进行重写(覆盖)(覆写)
	@Override//配合编译器检查当前方法是否为“重写”
	public void run() {
		System.out.println("这是子类的一个run()方法");
	}	
}
  • 创建的对象如果为子类对象,那么调用方法时,会先调用子类重写的方法
Student student=new Student();//创建的是子类对象
	Personx p=new Student();//创建的是子类对象
	student.run();//创建的是子类对象, 重写了方法,会优先调用子类方法
	p.run();//调用的是子类方法
  • 在子类的重写方法中,可以通过super来调用父类被重写了的方法
  • final 关键字修饰的方法,不能被重写
 - class Person {//父类
    protected String name;
    public final String hello() {
    //该方法被final修饰,不能被重写了
        return "Hello, " + name;
    }
}

Student extends Person {
    // compile error: 不允许重写
    @Override
 //   public String hello() {
 //   }//错误的
}
### Java 中方法重载与方法重写区别 #### 方法重载 (Overloading) 方法重载是指在一个类中定义多个同名但参数不同的方法。这些差异可以体现在参数的数量不同、参数类型的顺序不同等方面。需要注意的是,方法的返回类型并不影响是否构成重载。 ```java class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } } ``` 上述例子展示了 `add` 方法的不同版本,它们具有相同的名称但是接受不同类型或数量的参数[^3]。 #### 方法重写 (Overriding) 当子类提供了一个与其父类中存在的某个声明完全一致的方法时,则认为该子类覆盖了这个来自超类的方法。这意味着两个方法应该有同样的签名(即相同的名字、参数列表以及返回值),并且子类中的访问控制符不应更严格于父类中的相应成员。 ```java class Animal { public void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override public void sound() { super.sound(); // 调用父类的方法 System.out.println("Dog barks"); } } ``` 在这个案例里,`Dog` 类通过继承自 `Animal` 并实现了自己的 `sound()` 函数来展示如何正确地执行方法重写操作[^1]。 另外值得注意的一点是,在Java中如果想要在子类里面既调用自己的实现也能够访问到父类中原有的行为的话可以通过关键字 `super` 来完成这一目标[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值