多态!

时间:2019-09-29
本文章向大家介绍多态!,主要包括多态!使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

多态

java中如何实现多态?使用多态的好处?

引用变量的两种类型:
编译时类型(模糊一点,一般是一个父类)
 public  void (Pet pet);
由声明时的类型决定。
运行时类型(运行时,具体是哪个子类就是哪个子类)
由实际对应的对象类型决定。

多态的存在要有3个必要条件:


要有继承,要有方法重写,父类引用指向子类对象

为什么有重写?

父类引用指向子类对象一定用父类对象去调用子类方法,

调用的一定是被重写的方法。

 

为什么需要多态(封装以及继承)

1.多态
提高了程序的可扩展性和可维护性

提高代码复用性
2.封装
安全
提高代码复用性
3. 继承
提高代码复用性

多态的用2种表现形式

1.父类作为方法的参数

public  返回值类型 方法名(父类类型 对象名){
}
public  void feed (Pet pet){
}

 2.父类作为方法返回值(又称为工厂设计模式)

父类作为方法的返回值类型
	public Pet getPet(int type) {
//	声明一个pet对象
	Pet pet = null;
	switch (type) {
	case 1:
//	父类的引用指向子类的对象
	pet = new Dog("旺财",2,60,"金毛");
	break;
	}

具体应用:(以下代码都省去构造器和set,get设置器)

public class Cat extends Pet{
	private String color;

	@Override
	public void eat() {
		System.out.println("猫在吃鱼");
	}

	@Override
	public void bark() {
		System.out.println("miao miao miao");
	}

	
}
public class Dog extends Pet{
	private String brand;
	
	@Override
	public void eat() {
		System.out.println("狗在吃骨头");
	}

	@Override
	public void bark() {
		System.out.println("won won won");
	}

	
}
public abstract class Pet {
	private String name;
	private int age;
	private int love;
	private int health;

	public abstract void eat();
	public abstract void bark();

	

}

 2种多态的用法如下彩色字段

public class Person {
	/**
	 * 领养宠物的方法
	 * 父类的类型作为方法返回值的类型
	 * @return
	 */
	public Pet getPet() {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入索要领养的宠物的类型 1,狗 2,猫 3,猪");
		int type = input.nextInt();
		Pet pet = null;
		if (type == 1) {
			pet = new Dog();
		}else if(type == 2){
			pet = new Cat();
		}else {
			pet = new Pig();
		}
		
		return pet;
	}
	
	public void feed(Pet pet) {
		pet.eat();
	}

}
public class Test {
	public static void main(String[] args) {
		Person xiaoming = new Person();
		Pet pet = xiaoming.getPet();
		System.out.println(pet);
		
		xiaoming.feed(pet);
		
	}
}

 pig类可以看出多态的可扩展性




public class Pig extends Pet{

	@Override
	public void eat() {
		System.out.println("猪在吃白菜");
	}

	@Override
	public void bark() {
		System.out.println("heng 哼"); 
	}

}

原文地址:https://www.cnblogs.com/hsh5201314/p/11610440.html