码迷,mamicode.com
首页 > 其他好文 > 详细

多态!

时间:2019-09-29 23:31:18      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:inpu   声明   运行   highlight   nbsp   system   父类   宠物   代码   

多态

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 哼"); 
	}

}

 


 

多态!

标签:inpu   声明   运行   highlight   nbsp   system   父类   宠物   代码   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!