JAVA ------- Explicación detallada del polimorfismo

Polimorfismo: un mismo objeto muestra diferentes formas en diferentes momentos

  • Ejemplo: gato
    podemos decir que un gato es un gato: Gato gato = nuevo Gato ();
    también podemos decir que el gato es un animal: Animal animal = nuevo Gato ();
    Aquí el Gato en diferentes momentos mostró un estado diferente , que es polimórfico

  • La premisa y realización del polimorfismo:
    1. Herencia / Realización
    2. Hay formas de reescribir
    3. Tener una referencia de clase principal que apunte a un objeto de subclase

  • Los beneficios del polimorfismo:

    • Al definir el método, utilice el tipo principal como parámetro y utilice el subtipo específico para participar en la operación cuando se utilice en el futuro.
  • Desventajas del polimorfismo:

    • No se pueden utilizar las funciones únicas de la subclase.

Mira el código a continuación

clase animal:

public class animal {
    
    
	
	public int age=40;
	
	public void eat() {
    
    
		System.out.println("动物吃东西");
	}
}

clase de gato: reescribir animal

public class cat extends animal {
    
    
	
	public int age=20;
	public int weight=10;
	
	@Override
	public void eat() {
    
    
		// TODO Auto-generated method stub
		System.out.println("猫吃鱼");
	}

	public void playgame() {
    
    
		System.out.println("猫捉迷藏");
	}
}

Clase de perro: reescribir animal

public class dog extends animal {
    
    
	@Override
	public void eat() {
    
    
		System.out.println("狗吃骨头");
	}
}

animal Clase de operación:

public class animalOperation {
    
    
	public void useAnimal(cat c) {
    
    
		c.eat();
	}
	
	public void useAnimal(dog d) {
    
    
		d.eat();
	}
	}
}

principal clase principal:

public class animalDemo {
    
    
	public static void main(String[] args) {
    
    
		//有父类引用指向子类对象
		animal a=new cat();
		
		//多态访问成员变量编译和运行都要看animals有没有
		System.out.println(a.age);//输出40

		//多态访问成员方法编译看左边,运行看右边
		a.eat();
		
		//创建动物操作类对象,调用方法
		animalOperation ao=new animalOperation();
		cat c=new cat();
		ao.useAnimal(c);
		
		dog d=new dog();
		ao.useAnimal(d);
		
	}
}

Aquí debemos prestar atención a la forma en que el polimorfismo accede a las variables miembro y los métodos miembros. !

Por ejemplo, cree una clase polimórfica aquí, con la clase animal a la izquierda y la clase gato a la derecha siendo una subclase de la clase animal.

animal a=new cat();
  • En este momento, cuando el acceso polimórfico a las variables miembro, ya sea compilado o ejecutado, depende de si hay algún animal en la clase , por lo tanto, al acceder a las variables miembro, compilar y ejecutar se basan en el lado izquierdo.

  • Cuando el acceso polimórfico a los métodos miembro, el compilador mira al animal, y cuando se ejecuta, mira al gato. Es decir, en el momento de la compilación, mira si el animal de la izquierda tiene este método y cuándo ejecuta, mira el método en cat a la derecha. Por lo tanto, cuando acceda a los métodos miembros, compile y mire a la izquierda, y ejecute para mirar a la derecha


Y la ventaja de las bandas múltiples es: al definir el método, utilice el tipo principal como parámetro y utilice el subtipo específico para participar en la operación cuando se utilice en el futuro.

Puede ver que cada vez que define una nueva clase en la clase animalOperation anterior, debe volver a escribir el método de la clase. El polimorfismo resuelve este problema. Puede cambiar el código anterior a esto y usar la clase principal directamente como parámetro ., Y la subclase se puede usar directamente al llamar.


public class animalOperation {
    
    
	
	public void useAnimal(animal a) {
    
    
		//等同于animal a=new cat();
		//animal a=new dog();
		a.eat();
	}
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45102820/article/details/113122246
Recomendado
Clasificación