首页 > 编程语言 >Java面向对象第四章方法重写与多态练习题

Java面向对象第四章方法重写与多态练习题

时间:2024-10-03 18:49:32浏览次数:10  
标签:练习题 Java String int void 多态 health public name

练习1:使用重写优化电子宠物系统

需求说明 使用方法重写优化电子宠物系统,实现如下效果

 

package com.hz.ch02;
/**
 * 猫类
 * @author 26255
 *
 */
public class Cat extends Father {
	private  String sex;

	
	public Cat(String name, int health, int love, String sex) {
		super(name, health, love);
		this.sex = sex;
	}
	public void print() {
		super.print();
		System.out.println(",品种"+this.getSex());
	}
	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	
}
package com.hz.ch02;
/**
 * 狗类
 * @author 26255
 *
 */
public class Dog extends Father{
	private String  type;

	public Dog(String name, int health, int love, String type) {
		super(name, health, love);
		this.type = type;
	}
	public void print() {
		super.print();
		System.out.println(",品种"+this.getType());
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	
	
}

 

package com.hz.ch02;
/**
 * 父类
 * @author 26255
 *
 */
public class Father {
	private String name;
	private int health;
	private int love;
	
	
	
	
	
	public Father(String name, int health, int love) {
		super();
		this.name = name;
		this.health = health;
		this.love = love;
	}
	public void print() {
		System.out.println("我的名字是"+this.getName()+",健康值"+this.getHealth()+",亲密度"+this.getLove());
	
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHealth() {
		return health;
	}
	public void setHealth(int health) {
		this.health = health;
	}
	public int getLove() {
		return love;
	}
	public void setLove(int love) {
		this.love = love;
	}
	
}

 

package com.hz.ch02;

public class Lianx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Dog d = new Dog("白菜",100,100,"哈士奇");
		d.print();
		Cat s = new Cat("为2",60,70,"雌性");
		s.print();
	}

}

 运行:

我的名字是白菜,健康值100,亲密度100
,品种哈士奇
我的名字是为2,健康值60,亲密度70
,品种雌性

 

 练习2:重写equals()

需求说明 重写比较规则,判断两名学员(Student)是否为同一对象 Student相关属性 Id(学号)、name(姓名)、age(年龄) 如果两名学员的学号以及姓名相同,则为同一对象

instanceof用于判断一个引用类型所引用的对象是否是一个类的实例

package com.hz.ch01;
/**
 * 学生类
 */
public class Father {
	
	private String name;
	private String id;
	private int age;
	
	public boolean equals(Object obj) {
		if(obj instanceof Father) {
		Father m1 = (Father) obj;
		return this.name==m1.name&&this.id==m1.id;
		}
		
		return false;
	}

	public Father(String name, String id, int age) {
	
		this.name = name;
		this.id = id;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
		
	
	
	
}

 

package com.hz.ch01;

public class Lianx1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Father m = new Father("张三","qq",25);
		Father m1 = new Father("张三","qq",20);
		System.out.println(m.equals(m1));
	}

}

 运行:

true

练习3:使用多态实现为宠物喂食

需求说明 宠物饿了,主人需要为宠物喂食,使用多态实现该过程 不同宠物吃的东西不一样 不同宠物吃完东西后恢复健康值不一样 健康值达到100时,不需要继续喂食

 

package com.hz.ch03;
/**
 * 父类
 * @author 26255
 *
 */
public class Pet {
	private int health;
	
	
	public Pet(int health) {
	
		this.health = health;
	}

	public int getHealth() {
		return health;
	}
	//判断健康值
	public void setHealth(int health) {
		this.health = health;
		if(this.health>100) {
			this.health=100;
			System.out.println("健康值已到100,不需要继续喂食");
		}
		
	}
	public void eat(String un) {
		
	}
	
	
	
}
package com.hz.ch03;
/**
 * 狗狗类
 * @author 26255
 *
 */
public class Dog extends Pet{

	public Dog(int health) {
		super(health);
	
	}

	public void eat(String un) {
		System.out.println("狗狗的初始健康值"+getHealth()+",狗狗想吃"+un+"狗狗吃到了"+un+",健康值加三3");
		setHealth(getHealth()+3);
	}
	
}
package com.hz.ch03;
/**
 * 企鹅类
 * @author 26255
 *
 */
public class Penuin extends Pet{
	public Penuin(int health) {
		super(health);
	
	}

	public void eat(String un) {
		System.out.println("企鹅的初始健康值"+getHealth()+",企鹅想吃"+un+"企鹅吃到了"+un+",健康值加三5");
		setHealth(getHealth()+5);
	}
}

 

package com.hz.ch03;
/**
 * 主人类
 * @author 26255
 *
 */
public class Person {
	public void un(Pet pet,String un) {
		pet.eat(un);
		String s = un;
	}

	
}

 

package com.hz.ch03;

public class Lianx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person person = new Person();
		Pet dog  = new Dog(70);
		person.un(dog,"骨头");
		System.out.println("狗狗吃完后的健康值是:"+dog.getHealth());
		
		Pet penuin = new Penuin(80);
		person.un(penuin, "鱼");
		System.out.println("企鹅吃完后的健康值是:"+penuin.getHealth());
	}

}

 运行:

狗狗的初始健康值70,狗狗想吃骨头狗狗吃到了骨头,健康值加三3
狗狗吃完后的健康值是:73
企鹅的初始健康值80,企鹅想吃鱼企鹅吃到了鱼,健康值加三5
企鹅吃完后的健康值是:85

练习4:使用多态实现主人领养宠物并与宠物玩耍功能

需求说明 狗具有特有的接飞盘方法,企鹅具有特有的南极游泳方法。请编写测试类分别调用各种具体宠物的特有方法 使用向下转型 使用instanceof判断宠物类型

package com.hz.ch04;
/**
 * 父类
 * @author 26255
 *
 */
public class Pet {
	private String name;
	private int health=80;//健康值
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getLove() {
		return love;
	}

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

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

	private int love=50;//亲密度
	
	public Pet(String name, int health, int love) {
		super();
		this.name = name;
		this.health = health;
		this.love = love;
	}
	
	public int getHealth() {
		return health;
	}
	
	
	
	
}

 

package com.hz.ch04;
/**
 * 主人类
 * @author 26255
 *
 */
public class Person {
	private String name;
	private int age;
	
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public void play(Pet pet) {
		if(pet instanceof Dog) {
			Dog dog = (Dog)pet;
			dog.fly();
		}else if(pet instanceof Penuin) {
			Penuin p = (Penuin)pet;
			p.sw();
		}
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
	
	
}
package com.hz.ch04;
/**
 * 狗狗类
 * @author 26255
 *
 */
public class Dog extends Pet{
	private String strain;//品种

	
	public Dog(String name, int health, int love, String strain) {
		super(name, health, love);
		this.strain = strain;
	}
	public void fly() {
		System.out.println("小狗正在接飞盘!");
		System.out.println("健康值:"+super.getHealth()+10);
		System.out.println("亲密度:"+super.getLove()+5);
	}
	public String getStrain() {
		return strain;
	}

	public void setStrain(String strain) {
		this.strain = strain;
	}
	
	
	
	
}
package com.hz.ch04;
/**
 * 企鹅类
 * @author 26255
 *
 */
public class Penuin extends Pet{
	private String sex;

	public Penuin(String name, int health, int love, String sex) {
		super(name, health, love);
		this.sex = sex;
	}
	
	public void sw() {
		System.out.println("企鹅正在滑冰!");
		System.out.println("健康值:"+super.getHealth()+10);
		System.out.println("亲密度:"+super.getLove()+5);
	}
	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	

}
package com.hz.ch04;

public class Lianx {

	public static void main(String[] args) {
		Person m = new Person(null, 0);
		m.play(new Dog("zhang ", 0, 0, "hiw"));
		m.play(new Penuin("hduh ", 0, 0, "fwh"));
	}
	
}

 运行:

小狗正在接飞盘!
健康值:010
亲密度:05
企鹅正在滑冰!
健康值:010
亲密度:05

 

练习5:打印商品价格

需求说明 自定义类和方法,使用父类作为返回值实现打印不同类型商品价格功能 父类:Goods(商品类) 子类:TVs(电视类)、Foods(食品类)

package com.hz.ch05;
/**
 * 厂家
 * @author 26255
 *
 */
public class Plant {
	
	public Goods Goods(String type) {
		Goods goods = null;
		if(type.equals("tv")) {
			goods = new TVs();
		}else if(type.equals("食品")) {
			goods = new Foods();
			
		}
		return goods;	
		
	}
}
package com.hz.ch05;
/**
 * 食品类
 * @author 26255
 *
 */
public class Foods extends Goods{
	public void print() {
		System.out.println("食品价格:100");
	}
}
package com.hz.ch05;
/**
 * 父类
 * @author 26255
 *
 */
public abstract class Goods {
	private int price;//价格

	

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
	public abstract void print();
}

 

package com.hz.ch05;
/**
 * 电视类
 * @author 26255
 *
 */
public class TVs extends Goods{
	public void print() {
		System.out.println("电视价格:4999");
	}
}

 

package com.hz.ch05;

public class Lianxi {
	public static void main(String[] args) {
		Plant p1 = new Plant();
		Goods goods = p1.Goods("tv");
		goods.print();
		goods = p1.Goods("食品");
		goods.print();
	}
}

运行:

电视价格:4999
食品价格:100

标签:练习题,Java,String,int,void,多态,health,public,name
From: https://blog.csdn.net/QAZ412803/article/details/142673402

相关文章

  • JavaWeb基础-学习笔记02
    02MySQL数据库、SQL、数据库设计、事务、JDBC1.MySQL数据库1.1MySQL的安装:包含两种安装方式,解压包安装、压缩包安装。通过解压包安装:下载压缩包后进行解压、添加my.ini初始化配置文件、添加环境变量;添加mysqld服务、启动该服务。期间遇到的一些问题和解决方案:找......
  • Java流程控制-基础语法及运用
    基本语法Scannerin=newScanner(System.in);通过Scanner类的next()与nextLine()方法获取输入的字符串,再读取前还可以进行判断是否输入了数据。next()1.一定要读取到有效字符后才可以结束输入2.对输入有效字符之前遇到的空白,next()方法会自动将其去掉3.只有输入有效字符后才可以将其......
  • 探索 java 中的各种锁
    Java8+- 序章一直听说java的各种锁、(线程)同步机制,一直没有深入探索。最近多看了几篇博文,算是理解的比较深入一些了,特写本文做个记录。ben发布于博客园 锁是什么?一种用于多个线程运行时协调的机制。作用如下:ben发布于博客园1、用于多线程之间同步,比如,执行顺序先后......
  • Java内存区域与分配策略
    1.运行时数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,创建和以及销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有的区域则是依赖用户线程的启动结束而建立和销毁。1.1程序计数器(线程私有)程序计数器(Pro......
  • Java毕业设计:基于Springboo汽车故障维修预约网站毕业设计源代码作品和开题报告
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • Java数组
    数组数组概述数组是相同类型数据的有序集合数组声明创建首先必须声明数组变量,才能在程序中使用数组。dataType[]array//首选方法或dataTypearray[]//效果相同,但不是首选方法Java语言使用new操作符来创建数组dataType[]array=newdataType[arraySize];获取数......
  • 《Java 高级篇》八:新特性
    Author:ACatSmilingSince:2024-10-01Lambda表达式Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。Lambda表达式......
  • 《Java 高级篇》六:I/O 流
    Author:ACatSmilingSince:2024-10-01字符编码字符集Charset:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。编码表的由来:计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识别各个国家的文字。就将各个......
  • 《Java 高级篇》七:线程和线程池
    Author:ACatSmilingSince:2024-10-01程序、进程和线程程序(program):是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process):是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程——生......
  • Java多态性:面向对象编程的精髓
    目录1.什么是多态性?2.多态性的两种形式2.1 编译时多态(静态多态)2.2 运行时多态(动态多态)3.多态性的好处4.示例代码5.拓展知识5.1抽象类和接口5.2泛型5.3反射在软件开发的世界里,Java以其强大的面向对象编程(OOP)特性而闻名。今天,我们将深入探讨Java中的核心概......