Java方法重写(overriding)和方法重载(overloading)的区别

Java重载和重写的区别

一、方法重写(overriding)
方法重写的概念:即重写的方法的方法名、参数个数、参数的类型要和父类的方法必须完全相同。类这样定义的方法称作子类重写的方法。

//父类及父类拥有的方法
class Person {
    public void eat() {
        System.out.println("吃!");
    }

    public void work() {
        System.out.println("上班!");
    }

    public void sleep() {
        System.out.println("睡!");
    }
}

class Studentss extends Person {
	//子类重写了父类的work方法
	//可以看出方法名都是work,参数个数都是空的
    public void work() {
        //使用super关键字调用父类方法,执行父类的work()方法
        super.work();       
        System.out.println("study!");
        System.out.println("玩!");
    }
	//测试类
    public static void main(String[] args)
    {
        Studentss stu = new Studentss();        //创建子类对象
        stu.work();
    }

}

输出结果:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200413144633171.png
由此可以看出重写的目的:可以隐藏从父类继承的方法,如果非要用父类的方法可以使用关键 字super.父类的方法。
重写的注意事项:
1.参数列表必须完全与被重写的方法完全相同
2.参数的返回值必须一致
3.访问权限不能比父类中被重写方法的访问权限低
4.声明为final的方法不能被重写
5.声明为static的方法也不能被重写,但是可以被再次声明
6.如果子类和父类是在同一个包,那么子类可以重写父类的所有的方法
7.private,因为私有的都继承不了,那就重写不了
8.构造方法也不能被重写
二、方法重载(overloading)
方法重载:在一个类中,方法名相同、参数不同、返回值可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

public class Overload {

        public int test(){
        System.out.println("test1");
        return 1;
    }

    public void test(int a){
        System.out.println("test2");
    }

    public String test(String b,int a){
        System.out.println("test3");
        return "returnTest3";
    }

    public String test(int a,String b){
        System.out.println("test5");
        return "returnTest5";
    }

    public static void main(String[] args) {
        Overload o = new Overload ();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test("test3",1));
        System.out.println(o.test(1,"test3"));
    }
}

重载的注意事项:
1.方法名必须相同
2.方法的参数必须不同
3.返回类型可以相同也可以不同
参数不同包括:
1、参数的个数不同
2、参数的个数相同,但是参数列表中对应的某个参数的类型不同

小结:
方法重载(overload)和方法重写(overriding)是java中的两种多态,重写是父类和子类之间的一种多态的表现,而重载是一个类的多态表现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java方法重载方法重写都是实现多态的方式,但它们有着不同的实现方式和使用场景,具体区别如下: 方法重载Overloading):在同一个类中,方法名称相同,但参数列表不同的方法称为方法重载方法重载的目的是为了方便程序员,可以通过方法名直接调用不同的方法实现相似的功能。举个例子: ```java public class Calculator { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } } ``` 上面的代码中,`Calculator` 类中定义了两个名为 `add` 的方法,一个接受 `int` 类型的参数,另一个接受 `double` 类型的参数。这两个方法名称相同,但参数列表不同,因此它们构成了方法的重载方法重写Overriding):在子类中重新定义与父类中同名、同参数列表的方法,称为方法的重写方法重写的目的是为了实现多态性,即同一个方法在不同的对象中具有不同的实现。举个例子: ```java public class Animal { public void say() { System.out.println("I am an animal."); } } public class Dog extends Animal { @Override public void say() { System.out.println("I am a dog."); } } ``` 上面的代码中,`Animal` 类中定义了一个名为 `say` 的方法,而 `Dog` 类继承了 `Animal` 类,并重新定义了 `say` 方法,实现了对 `Animal` 类中方法的重写。在 `Dog` 类中调用 `say` 方法时,会输出 `I am a dog.` 的内容。 可以看出,方法重载方法重写都是实现多态的方式,但它们的实现方式和使用场景有所不同。方法重载主要用于实现相似的功能而方法重写则用于实现不同的功能。在使用时需要根据具体的情况选择使用哪种方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值