Java基础361问第6问——重载和重写的区别

首先说二者的相同点:

方法名相同

重写时,方法具有完全相同的参数
重载时,方法具有不同的参数(个数,类型或者顺序)

下面这个方法为原方法

public int getAge(int a){
        return 1;
    }

1 不同的参数个数

public int getAge(int a,int b){
        return 1;
    }

2 不同的参数类型

public int getAge(String a){
        return 1;
    }

3 不同的参数顺序

public int getAge(String a,int b){
        return 1;
    }

public int getAge(int a,String b){
        return 1;
    }

这两个方法就互为重载方法

我们知道方法除了参数还有返回类型,那么如果两个方法参数相同,方法名相同但是只有返回类型不同可以算是重载方法吗?

不能!

在这里插入图片描述
会提示错误你已经定义过这个方法,反过头来你想想,如果可以这么定义的话,那么这个对象应该调用哪个方法是不是就懵逼了?对象发现方法名和参数完全一样,根本区分不出来这个方法(期待着有一天虚拟机可以根据返回类型调用方法)

延伸
我们都知道面向对象三大特性之一就是多态,java基础经常会有下面这样的题目

public class Person {

    public void getAge(){
        System.out.println("我是人类");
    }

}

public class Student extends Person {
    public void getAge(){
        System.out.println("我是个学生");
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Student();
        p.getAge();
    }
}

请问输出的是什么?
后来我们知道,对同一种信号的不同处理叫做“多态”,我们也知道了会输出“我是个学生”

我们打开Student类,准备重写它的getAge方法却发现找不到了,这也就意味着虽然·我们没有使用@Override注解告诉编译器这是子类重写的方法但是编译器自己存在检测功能,发现和父类一样的方法就默认重写这个方法

所以多态是特性,具体来说还是重写这个方法

我们知道重载是不能有同样的参数,而不是不同的返回类型,刚才我们一个类中已经测试了,现在Stdent和Person是两个类,在他们在两个类中,是不是就可以实现下面的效果呢?

public class Person {

    public void getAge(){
        System.out.println("我是人类");
    }

}

public class Student extends Person {
    
    public String getAge(){
        System.out.println("我是个学生");
        return "";
    }
}

对不起,还是不可以
在这里插入图片描述
这个参数被父类使用了,子类不能再修改这个方法了,所以继承的好处也出来了
保护原有的结构同时可以让继承类扩展更多的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值