JAVA笔记(十一)面向对象--多态

本文探讨了在JAVA中使用多态的原因和方式。通过动物喂食的示例,展示了多态如何提高代码的扩展性和可维护性。多态定义为同一个行为在不同对象上有多种形态。实现多态的条件包括继承、方法重写和父类引用指向子类对象。多态的实现方式包括将父类作为方法参数和返回值。多态带来的优点包括减少类型耦合、提高代码可替换性、可扩充性、接口性和灵活性。
摘要由CSDN通过智能技术生成

引言:面向对象三大特征:封装,继承,多态,前面我们已经学习了封装和继承,本章节我们来详细讲解多态,该章节知识点需要使用继承知识点,如果你还未学习继承,请出门右转,学习完再回来。

一、为什么使用多态:

讲解多态之前,我们先来看一个问题,实际需求中有两种动物,狗和企鹅,现在我们需要编写一个程序实现动物饿了,动物主人喂食的过程:

在这里插入图片描述

经过分析,我们发现两种动物有相同的属性(昵称:name,健康值:health,亲密度:love)和相同的方法(属性对应的set/get方法及相关打印方法),那么对系统进行优化我们可以将两者相同属性和方法进一步 抽取形成共同的父类动物类,但是我们发现不同动物吃的东西不同,不同宠物吃完以后恢复的体力值不同,如果我们把动物吃东西的过程看做一个方法,那么两个类的吃东西的方法是不同的。

通过分析,我们可以得到以下类:

  • 动物类:属性(共同属性),方法(共同方法)

  • 狗类:属性(xx),方法(狗吃食的方法)

  • 企鹅类:属性(xx),方法(企鹅吃食的方法)

  • 动物主人类:属性(xx),方法(给狗狗喂食的方法,给企鹅喂食的方法)

  • 编写测试类:动物主人给狗喂食的方法,动物主人给企鹅喂食的方法

代码如下:

父类:

package cn.hz;

/**
* 宠物类,狗狗和企鹅的父类。
 *
 * @author  hz
*/
public  class Pet {
   
	private String name = "无名氏";// 昵称
	private int health = 100;// 健康值
	private int love = 0;// 亲密度
	
	/**
	 * 有参构造方法。
	 * @param name  昵称
	 */
	public Pet(){
   
		
	}
	
	public Pet(String name) {
   
		this.name = name;
	}
	
	public void setName(String name) {
   
		this.name = name;
	}

	public void setHealth(int health) {
   
		this.health = health;
	}
	public void setLove(int love) {
   
		this.love = love;
	}

	public String getName() {
   
		return name;
	}
	public int getHealth() {
   
		return health;
	}
	public int getLove() {
   
		return love;
	}
	/**
	 * 输出宠物信息。
	 */
	public void print() {
   
		System.out.println("宠物的自白:\n我的名字叫" + this.name + 
				",健康值是"	+ this.health + ",和主人的亲密度是"
				+ this.love + "。");
	}	
}


子类:

package cn.hz;

/**
 * 狗狗类,宠物的子类。
 *
 * @author hz
 */
public class Dog extends Pet {
   
   private String strain;// 品种
   /**
    * 有参构造方法。
    * @param name   昵称
    * @param strain   品种
    */
   public Dog(String name, String strain) {
   
      super(name); 
      this.strain = strain;
   }
   public String getStrain() {
   
      return strain;
   }
   /**
    * 重写父类的print方法。
    */
   public void print(){
   
      super.print(); //调用父类的print方法
      System.out.println("我是一只 " + this.strain + "。");
   }
   
   /**
    * 实现吃食方法。 
    */
   public void eat() {
   
      if(getHealth()>=100){
   
         System.out.println("狗狗"+this.getName() +"吃饱了,不需要喂食了!");
      }else{
   
         this.setHealth(this.getHealth()+3);
         System.out.println("狗狗"+this.getName(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值