欢迎访问宙启技术站
智能推送

Java中如何通过多态实现函数重写和函数重载

发布时间:2023-07-03 13:46:16

Java中利用多态实现函数重写和函数重载的机制是通过方法重载和方法重写来实现的。

首先,方法重载是指在同一个类中使用相同的方法名,但是参数列表不同的情况下可以定义多个方法。通过方法重载可以方便地提供多个不同的方法实现,以满足不同的需求。

方法重载的特点有:

1. 方法重载必须在同一个类中进行;

2. 方法重载的方法名必须相同,但是参数列表可以不同,包括参数的顺序、个数以及类型;

3. 方法重载可以有不同的返回类型;

4. 方法重载可以有不同的访问控制修饰符。

示例代码如下:

public class OverloadExample {
    public void print(int num) {
        System.out.println("print int: " + num);
    }
    
    public void print(String str) {
        System.out.println("print string: " + str);
    }
    
    public void print(int num1, int num2) {
        System.out.println("print two ints: " + num1 + ", " + num2);
    }
    
    public static void main(String[] args) {
        OverloadExample example = new OverloadExample();
        example.print(10);
        example.print("Hello");
        example.print(20, 30);
    }
}

上述代码中定义了一个OverloadExample类,其中有三个重载的print方法,分别接受一个整型参数、一个字符串参数以及两个整型参数。在main方法中,我们创建了一个OverloadExample对象,并通过不同的参数调用了不同的print方法。

其次,方法重写是指在子类中可以对父类中已有的方法进行重新定义。通过方法重写可以实现子类对父类方法的个性化需求,提供更加灵活的功能。

方法重写的特点有:

1. 方法重写必须在子类中进行;

2. 方法重写的方法名、参数列表和返回类型必须和父类中的方法完全相同;

3. 方法重写不能修改父类中的final方法;

4. 方法重写可以修改父类中非final方法的访问控制修饰符,但不能降低其访问权限;

5. 方法重写不能抛出更多或更宽的异常,不能添加新的异常。

示例代码如下:

class Animal {
    public void sound() {
        System.out.println("Animal is making a sound");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Dog is barking");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Cat is meowing");
    }
}

public class OverrideExample {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Animal dog = new Dog();
        Animal cat = new Cat();
        
        animal.sound();
        dog.sound();
        cat.sound();
    }
}

上述代码中定义了一个Animal类,并定义了一个sound方法。然后定义了两个子类DogCat,并分别重写了sound方法。在main方法中,我们创建了一个Animal对象以及两个子类对象,并通过调用sound方法来实现不同的功能。

通过多态,我们可以在运行时根据实际对象类型来决定调用哪个方法。在上述代码中,当调用sound方法时,会根据对象的实际类型来调用对应的重写方法,而不是根据引用变量的类型来调用。这就是利用多态来实现方法重写的效果。