在Java编程中,方法重写与多态是两个非常重要的概念。它们是面向对象编程的核心概念之一,也是Java语言的特性之一。方法重写是指子类重新定义父类的方法,而多态则是指一个对象可以具有多种形态。

在Java中,方法重写是通过子类继承父类并重写父类方法实现的。子类可以继承父类的方法,也可以根据自己的需要对父类方法进行重新定义。当子类重写了父类的方法后,通过子类对象调用该方法时,实际执行的是子类中的方法,而不是父类中的方法。这种行为称为方法重写。

方法重写的实现需要满足以下条件:

  • 方法名必须与父类方法名相同
  • 参数列表必须与父类方法参数列表相同
  • 返回类型可以相同也可以是父类返回类型的子类
  • 访问修饰符不能比父类方法的访问修饰符更严格
  • 重写的方法不能抛出比父类方法更多的异常

    public class Animal {
        public void sound() {
            System.out.println("Animal is making a sound");
        }
    }
    
    public class Dog extends Animal {
        public void sound() {
            System.out.println("Dog is barking");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Animal animal = new Animal();
            Animal dog = new Dog();
            
            animal.sound(); // Output: Animal is making a sound
            dog.sound(); // Output: Dog is barking
        }
    }
  

上述代码中,Animal类有一个sound()方法,而Dog类继承了Animal类并重写了sound()方法。在主方法中,创建了一个Animal对象和一个Dog对象,并分别调用它们的sound()方法。由于Dog类重写了sound()方法,所以通过Dog对象调用该方法时实际执行的是Dog类中的sound()方法。

多态是指一个对象可以具有多种形态。在Java中,多态的实现是通过父类的引用指向子类的对象实现的。通过父类引用指向子类对象时,可以根据赋值给父类引用的子类对象的不同,调用相同的方法实现不同的行为。这种行为称为多态。


    public class Animal {
        public void sound() {
            System.out.println("Animal is making a sound");
        }
    }
    
    public class Dog extends Animal {
        public void sound() {
            System.out.println("Dog is barking");
        }
    }
    
    public class Cat extends Animal {
        public void sound() {
            System.out.println("Cat is meowing");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Animal animal = new Animal();
            Animal dog = new Dog();
            Animal cat = new Cat();
            
            animal.sound(); // Output: Animal is making a sound
            dog.sound(); // Output: Dog is barking
            cat.sound(); // Output: Cat is meowing
        }
    }
  

上述代码中,Animal、Dog和Cat类分别代表动物、狗和猫。它们都有一个sound()方法,分别输出不同的声音。在主方法中,创建了一个Animal对象和一个Dog对象,并分别调用它们的sound()方法。由于Dog类和Cat类都是Animal类的子类,所以可以用Animal类的引用指向Dog类和Cat类的对象,通过该引用调用sound()方法实现多态行为。

总结来说,Java中的方法重写和多态是面向对象编程的重要概念。方法重写通过子类重新定义父类方法,实现了对父类方法的覆盖和扩展。多态通过父类引用指向子类对象,实现了在不同对象上调用相同方法实现不同行为的能力。方法重写和多态使得代码更加灵活,可扩展性更好,并且能够更好地符合面向对象编程的原则。