【Java中重写与重载的概念特点及它们的区别】(含代码讲解)

1.重写的概念特点

重写发生在子类中,当子类继承自父类时,子类可以提供与父类中签名(signature)相同的方法的实现。这里的签名包括方法名称、参数列表和返回类型。重写的目的是在子类中提供具体化(specialized)的行为,即对父类方法的具体实现。

特点:

1、发生在继承关系中。

2、方法名、参数列表和返回类型必须与父类中的方法完全相同。

3、重写的方法必须在子类中声明为public、protected或默认(没有修饰符)。

4、重写的方法的访问权限不能比父类中的方法更严格。

5、重写的方法的返回类型可以是父类返回类型的子类型。

2.重载的概念特点

重载发生在同一个类中,当一个类中有多个方法的名称相同,但参数列表不同(参数的数量、类型或顺序不同)时,这些方法被认为是重载的。重载的目的是提供相同操作的不同实现,以便于以不同的方式调用同一操作。

特点:

1、发生在同一个类中。

2、方法名相同,但参数列表必须不同。

3、重载的方法可以有不同的访问权限。

4、重载的方法可以有不同的返回类型。

5、重载的方法可以有不同的异常声明。

3.重写与重载的区别

1、关系:重写是继承关系中的概念,而重载是类成员的概念。

2、目的:重写的目的是为了提供子类特定的行为,而重载的目的是为了提供同一操作的不同实现。

3、方法签名:重写要求方法签名完全相同,重载要求方法名相同但参数列表不同。

4、访问权限:重写的方法访问权限不能比父类中的方法更严格,重载的方法可以有不同的访问权限。

5、返回类型:重写的返回类型可以是父类返回类型的子类型,重载的方法可以有不同的返回类型。

总结来说,重写是子类对父类方法的特定化,而重载是同一个类中多个方法名相同但参数不同的情况。

4.重写(Overriding)的应用场景

假设有一个动物基类 Animal,它有一个方法 makeSound(),用于让动物发出声音。现在要创建一个 Dog 子类,它继承自 Animal 类,但希望狗发出特定的汪汪声。

public class Animal {
    public void makeSound() {
        System.out.println("The animal makes a sound");
    }
}
public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪~");
    }
}

在这个例子中,Dog 类重写了 Animal 类的 makeSound() 方法,以便狗发出特定的叫声。

5.重载(Overloading)的应用场景

假设有一个计算器类 Calculator,它有一个方法 add(),用于加法运算。但由于不同的需求,可能需要添加不同类型的数值,比如整数、浮点数或字符串表示的数值。

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public int add(String a, String b) {
        return Integer.parseInt(a) + Integer.parseInt(b);
    }
}

在这个例子中,Calculator 类重载了 add() 方法,以支持不同类型的参数。这样,用户可以根据需要选择不同类型的 add() 方法来执行加法运算。

6.同时发生的重写和重载

在下面的例子中,一个类继承自另一个类,并在同一类中重载了方法。

public class Shape {
    public void display() {
        System.out.println("This is a shape");
    }
}

public class Rectangle extends Shape {
    @Override
    public void display() {
        System.out.println("This is a rectangle");
    }

    public void display(String color) {
        System.out.println("This rectangle is " + color);
    }
}

在这个例子中,Rectangle 类重写了 Shape 类的 display() 方法,以便矩形显示特定的信息。同时,Rectangle 类还重载了 display() 方法,接受一个 color 参数,以便以不同的颜色显示矩形。

7.小结

总结来说,重写通常用于子类中特定化父类的行为,而重载则用于在同一个类中提供同一操作的不同版本。在实际项目中,这两种方式可以根据需求灵活使用,以实现代码的复用和扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值