java:面向对象-多态

概念

多态是同一个行为具有多个不同表现形式或形态的能力。
体现:同一个接口,使用不同的实例而执行不同操作

实现

将父类作为方法的形参,将子类的对象作为方法的实参,从而实现多态。

方式一:重写
方式二:接口
方式三:抽象类和抽象方法

实例

自动类型转换(向上转型)

案例:主人与宠物玩耍、喂养

  • 主人类:Master
  • 宠物类:Pet --> Dog、Cat
  • 食物类:Food --> Bone、Fish

宠物类:

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("这是一只宠物");
	}
}

Dog类:
通过重写父类的方法实现多态

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 + "正在走猫步...");
	}
}

主人类:

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的实参),从而实现多态。
}

测试:

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);
	}
}
// 旺财正在接飞盘...
// 猫儿正在走猫步...

总结

多态的条件:

  • 继承(继承是多态的基础,没有继承就没有多态)
  • 重写(多态下调用的是子类重写后的方法)
  • 父类引用变量指向子类对象:Parent p = new Child();
    将父类作为方法的形参(将Pet作为play方法的形参),将子类的对象作为方法的实参(将dog、cat作为play的实参),从而实现多态。

多态的优点:

  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性

猜你喜欢

转载自blog.csdn.net/weixin_43972437/article/details/113802510