【Java开发指南 | 第二十五篇】Java 重写(Override)与重载(Overload)

读者可订阅专栏:Java开发指南 |【CSDN@秋说】

在这里插入图片描述

Java 重写(Override)与重载(Overload)

重写(Override)是指子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。

重写使得子类能够根据需要实现父类的方法,在使用子类对象调用该方法时,将执行子类中的方法而不是父类中的方法。

方法的重写规则

1、重写的方法必须具有与被重写方法相同的参数列表。因此,首先要确保参数列表的匹配程度。

2、虽然Java 5及更早版本要求返回类型必须相同,但Java 7及更高版本允许返回类型不同,但必须是父类返回值的派生类。因此,在重写方法时要考虑返回类型的兼容性。

3、子类中重写的方法的访问权限不能比父类中被重写方法的访问权限更低。例如,如果父类的方法是public的,那么子类中重写的方法不能声明为protected

4、只有非final的方法才能被重写,因此要确保被重写的方法不是final

5、重写的方法能够抛出任何非强制异常,但不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常。

6、静态方法和私有方法不能被重写,只能被再次声明。因此,在考虑重写时,这些方法不需要考虑在内。

7、子类和父类在同一个包中或不同包中会影响能否重写方法的访问权限。

8、构造方法不能被重写,因此不需要考虑在内。

示例:

class Animal{
   public void iii(){
      System.out.println("动物");
   }
}
 
class Dog extends Animal{
   public void iii(){
      System.out.println("狗");
   }
}
 
public class Ice{
   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象
      a.iii();// 执行 Animal 类的方法
      b.iii();//执行 Dog 类的方法
       //b属于Animal类型,但是它运行的是Dog类的move方法。
   }
}

在这里插入图片描述

Super 关键字的使用

在一般情况下,当需要在子类中调用父类的被重写方法时,通常会使用 super 关键字。这样做可以确保调用的是父类的方法而不是子类的方法。

class animal{
	public void a() {
		System.out.println("sleep");
	}
}

class dog extends animal
{
	public void a()
	{
		//super.a();
        //由于没有使用super,因此不调用父类方法
		System.out.println("dog");
        
	}
}

public class Ice{
	public static void main(String args[])
	{
		animal b=new dog();//dog对象
		b.a();
	}
}

在这里插入图片描述

调用了父类的方法:

在这里插入图片描述

重载(Overload)

重载(Overloading)是Java中一种编程技术,它允许在同一个类中定义多个方法,这些方法具有相同的名称,但参数列表不同的情况。在重载的方法中,参数列表的个数、类型或顺序必须不同。

重载规则:

1、被重载的方法必须改变参数列表(参数个数或类型不一样);

2、被重载的方法可以改变返回类型;

3、被重载的方法可以改变访问修饰符;

4、被重载的方法可以声明新的或更广的检查异常;

5、方法能够在同一个类中或者在一个子类中被重载。

6、无法以返回值类型作为重载函数的区分标准。

示例:

public class Ice {
	//在Ice类中定义多个方法,这些方法具有相同的名称,但参数列表不同
    public int test(){
        return 0;
    }
 
    public void test(int a){
        System.out.println(a);
    }   
 
    public String test(int a,String s){
        return "s1";
    }   
 
    public String test(String s,int a){
        return "s2";
    }   
 
    public static void main(String[] args){
        Ice o = new Ice();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test(1,"Ice"));
        System.out.println(o.test("Ice",1));
    }
}

在这里插入图片描述

重写与重载之间的区别

重写是父类与子类之间多态性的一种表现,而重载是多态性的具体表现形式之一。

区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏,祝你平安喜乐。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值