【Java】重载和重写

一、重载

重载指在一个类中有多个同名方法,但通过不同的参数列表可以有不同的表现形式。调用方法时通过参数列表决定调用哪个重载方法。

使用说明:

参数列表不同可以是参数类型不同、参数个数不同和参数顺序不同

判断方法是否重载不能通过返回值类型、权限修饰符、抛出异常大小

重载是一种编译时多态,发生在同一个类中

代码如下:

public class Test {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.display("a",1);
        p1.display(1,2);
        p1.display(1,"a");
        p1.display("a",1,2);
    }
}

class Person {
    public void display(String var1,int var2){
        System.out.println("原方法");
    }
    public void display(int var1,int var2) {
        System.out.println("改变参数类型");
    }
    public void display(int var2,String var1){
        System.out.println("改变参数顺序");
    }
    public void display(String var1,int var2,int var3){
        System.out.println("改变参数个数");
    }
}

输出如下:

原方法
改变参数类型
改变参数顺序
改变参数个数

注意点:

若两个参数类型相同,调换参数顺序时不构成重载

代码如下:

class Person {
    public void display(int var1,int var2){
        System.out.println("原方法");
    }
    //编译不通过
    public void display(int var2,int var1) {
        System.out.println("改变参数顺序");
    }

}

二、重写

重写是指子类重写父类继承的方法。

方法重写是一种运行时多态,在编译时并不能确定子类具体的调用方法。

子类重写的方法必须具有和父类相同的方法名和参数列表

使用说明:

重写方法的访问权限要大于等于父类

代码如下:

class Person {
     protected void display(){

    }
}
class child extends Person{
    //编译不通过
    @Override
    void display(){

    }
}

重写方法抛出的异常要小于等于父类

代码如下: 

class Person {
     protected void display() throws RuntimeException{

    }
}
class child extends Person{
    //编译不通过
    @Override
    public void display()throws Exception{

    }
}

 若父类方法返回值类型为void,子类返回值类型也为void

代码如下:

class Person {
     protected void display() {
         
    }
}
class child extends Person{
    //编译不通过
    @Override
    public int display(){
        return 0;
    }
}

 若父类方法返回值类型为基本数据类型,子类要返回相同的数据类型

 代码如下:

class Person {
    protected int display() {
        return 0;
    }
}

class child extends Person {
    @Override
    public int display() {
        return 0;
    }
}

若父类方法返回值类型为引用数据类型,子类返回的数据类型要小于等于父类的返回值类型 

代码如下:

class Person {
    protected String display() {
        return "";
    }
}

class child extends Person {
    @Override
    public String display() {
        return "";
    }
}

 注意点:

重写只能用于方法,不能用于变量

子类无法重写static、final、private修饰的方法

若父类方法被private修饰,子类继承该父类时,只能拥有这个方法,但无法对这个方法进行调用或者重写。

重写是一种运行时多态。根据运行时生成的对象决定调用的方法,重写的实现依赖于对象。若方法被static修饰,这个方法只跟类相关,跟对象无关。所以无法重写static修饰的方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值