多态的概述
在Java中,多态性是通过继承和方法重写来实现的。当一个类继承自另一个类并重写了父类的方法时,可以通过父类的引用指向子类的对象,从而使得同一个方法调用可以产生不同的行为。
多态的好处在于它增加了代码的灵活性和可扩展性。通过多态,我们可以编写更通用、可复用的代码,使得程序更易于维护和扩展。
多态的使用
java
class Animal {
public void makeSound() {
System.out.println("Animal makes sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound(); // 输出:Dog barks
animal2.makeSound(); // 输出:Cat meows
}
}
多态调用成员方法口诀:编译看左边,运行看右边
在上述示例中,Animal
是父类,Dog
和Cat
是子类。通过父类类型的引用分别指向子类对象,并调用它们的makeSound()
方法,实现了多态性。尽管是通过相同的方法调用,但由于子类重写了父类的方法,所以输出的结果不同。
多态调用成员变量口诀:编译看左边,运行看左边
class Animal {
String name = "Animal";
}
class Dog extends Animal {
String name = "Dog";
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Animal();
Animal animal2 = new Dog();
System.out.println(animal1.name); // 输出:Animal
System.out.println(animal2.name); // 输出:Animal
}
}
在上述示例中,Animal
类和Dog
类都有一个名为 name
的实例变量,但是它们的值分别为 "Animal"
和 "Dog"
。当使用 Animal
类型的引用 animal1
调用 name
变量时,会输出 "Animal"
;当使用 Dog
类型的引用 animal2
调用 name
变量时,由于 Dog
类中定义了 name
变量,因此会输出 "Animal"
而不是 "Dog"
。
javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败。