每日学习-Java基础(十)接口和继承4(多态)

一、多态
1、操作符多态

package ia4_polymorphism;

public class Introduce {

	public static void main(String[] args) {

		// 什么是多态?
		// 1-操作符多态 同一事物表现不同形态(功能)
		// +
		// 加法,可以是数字相加,字符串连接,主要看参与运算的是什么数据
		int a = 2;
		int b = 3;
		int k = a + b; // 参与运算的数据都是整数,数字相加
		System.out.println("K = " + k);

		String x = "Happy";
		int y = 5;
		String m = x + y; // 参与运算的任意一个数据为字符串,字符串连接
		System.out.println("m = " + m);
	}
}

2、类多态

package ia4_polymorphism;

public class Item {
	protected String name;
	protected float price;

	public void buy() {
		System.out.println("买买买");
	}

	public void effect() {
		System.err.println("物品使用后,可以有效果");
	}

	public static void main(String[] args) {
		// 2-类多态
		// 父类(接口)引用指向子类对象

		// 2-1 类多态
		Item it1 = new LifePotion();
		Item it2 = new MagicPotion();
		it1.effect();
		it2.effect();

		// it1、it2都是Item类,调用effect方法,输出不同结果
		// it1引用指向LifePotion对象
		// it2引用指向MagicPotion对象

		// 2-2 条件
		// 父类(接口)引用指向子类对象
		// 方法重写,子类重写父类方法
	}
}

在这里插入图片描述

package ia4_polymorphism;

public class LifePotion extends Item {
	public void effect() {
		System.out.println("血瓶使用后,可以回血");
	}
}
package ia4_polymorphism;

public class MagicPotion extends Item {
	public void effect() {
		System.out.println("蓝瓶使用后,可以回魔法");
	}
}

二、为什么用多态?
1、不使用多态

package ia4_polymorphism2;

import ia4_polymorphism.LifePotion;
import ia4_polymorphism.MagicPotion;

public class Hero {
	protected String name;
	protected float hp;

	public void useLifePotion(LifePotion lp) {
		lp.effect();
	}

	public void useMagicPotion(MagicPotion mp) {
		mp.effect();
	}

	// …… 还有很多很多

	public static void main(String[] args) {
		Hero garen = new Hero();
		garen.name = "盖伦";

		LifePotion lp = new LifePotion();
		MagicPotion mp = new MagicPotion();

		garen.useLifePotion(lp);
		garen.useMagicPotion(mp);

		// 净化药水,隐身药水,护甲,武器等等都需要一个方法,Hero类混乱不堪
	}
}

2、使用多态

package ia4_polymorphism3;

import ia4_polymorphism.Item;
import ia4_polymorphism.LifePotion;
import ia4_polymorphism.MagicPotion;

public class Hero {
	protected String name;
	protected float hp;

	// 不管要使用什么物品,一个方法通通搞定
	// 只要满足多态条件即可
	public void useItem(Item it) {
		it.effect();
	}

	public static void main(String[] args) {
		Hero garen = new Hero();
		garen.name = "盖伦";

		LifePotion lp = new LifePotion();
		MagicPotion mp = new MagicPotion();

		garen.useItem(lp);
		garen.useItem(mp);
	}
}

三、练一练
接口引用指向子类对象情况
1、Mortal接口,die方法;
2、ADHero、APHero、ADAPHero实现Mortal接口,并提供die方法,输出不同字符串;
3、Hero类中定义kill方法,通过多态分别kill上面三个英雄;
public void kill(Mortal m)

部分代码:

package ia4_polymorphism4;

public class Hero {
	protected String name;
	protected float hp;
	
	public void kill(Mortal m) {
		m.die();
	}
	
	public static void main(String[] args) {
		Hero garen = new Hero();
		garen.name = "盖伦";
		
		ADHero ad = new ADHero();
		APHero ap = new APHero();
		ADAPHero adap = new ADAPHero();
		
		garen.kill(ad);
		garen.kill(ap);
		garen.kill(adap);
	}
}

在这里插入图片描述
我的学习源泉:https://how2j.cn/k/interface-inheritance/interface-inheritance-polymorphic/315.html?p=114999
Java自学网站:https://how2j.cn?p=114999

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值