concepto
El polimorfismo es la capacidad de tener múltiples manifestaciones o formas diferentes del mismo comportamiento.
Realización: la misma interfaz utiliza diferentes instancias para realizar diferentes operaciones
lograr
Tome la clase principal como parámetro formal del método y use el objeto de la subclase como parámetro real del método para lograr el polimorfismo.
Método uno: reescribir
Método dos: interfaz
Método tres: clase abstracta y método abstracto
Ejemplo
Conversión automática de tipos (upcast)
Caso: Dueño y mascota juegan y alimentan
- Maestro humano: Maestro
- Categoría de mascota: Mascota -> Perro, Gato
- Categoría de alimentos: Alimentos -> Huesos, Pescado
Mascotas:
public class Pet {
String name;
String sex;
public Pet {
super()
}
public Pet (String name, String sex) {
this.name = name;
this.sex = sex;
}
public void show () {
System.out.println("这是一只宠物");
}
public void play () {
System.out.println("这是一只宠物");
}
}
Clase de perro:
logra el polimorfismo anulando el método de la clase principal
public class Dog extends Pet {
String hobby;
public Dog {
super();
}
public Dog (String name, String sex, String hobby) {
super()
this.hobby = hobby;
}
@override
public void show () {
System.out.println("这是一只狗狗,名叫" + name);
}
@override
public void play () {
System.out.println(name + "正在接飞盘...");
}
}
public class Cat extends Pet {
String breed;
public Cat {
super();
}
public Cat (String name, String sex, String breed) {
super()
this.breed = breed;
}
@override
public void show () {
System.out.println("这是一只猫猫,名叫" + name);
}
@override
public void play () {
System.out.println(name + "正在走猫步...");
}
}
Maestro humano:
public Master {
String name;
public Master {
super();
}
public Master(String name) {
super();
this.name = name;
}
/*
public void play (Dog dog) {
dog.play()
}
public void play (Cat cat) {
cat.play()
}
...
*/
// 代替为
public void play (Pet pet) {
pet.play()
}
// 将父类作为方法的形参(将Pet作为play方法的形参),将子类的对象作为方法的实参(将dog、cat作为play的实参),从而实现多态。
}
prueba:
public Test {
public staic void main(String[] args) {
Master master = new Master("唐伯虎");
Dog dog = new Dog("旺财", "公", "玩游戏");
master.play(dog);
Dog cat = new Cat("猫儿", "公", "玩游戏");
master.play(cat);
}
}
// 旺财正在接飞盘...
// 猫儿正在走猫步...
para resumir
Condiciones para el polimorfismo:
- Herencia (la herencia es la base del polimorfismo, no hay polimorfismo sin herencia)
- Anular (en polimorfismo, se llama al método anulado de la subclase)
- La variable de referencia de la clase principal apunta al objeto de la subclase:
Parent p = new Child();
tome la clase principal como el parámetro formal del método (usando Pet como el parámetro formal del método de juego), y use el objeto de la subclase como el parámetro real del método ( utilizando el perro y el gato como parámetros reales del juego), para lograr el polimorfismo.
Ventajas del polimorfismo:
- Eliminar el acoplamiento entre tipos
- Reemplazabilidad
- Escalabilidad
- Interfaz
- flexibilidad
- Simplificación