面向对象练习(3)

news/2024/7/5 1:47:52

封装与继承


目录

1.使用封装实现企鹅类

2.选民投票

3.使用继承实现电子宠物系统

4.游戏开发-面向对象

5.信息输出-面向对象

6.电子宠物系统

7.程序分析


1.使用封装实现企鹅类

package dh03;

/**
 * 
 * @author XXX 保证健康值的有效性(0-100),否则取默认值60 保证亲密度的有效性(0-100),否则取默认值60
 *         2023年6月9日下午4:55:22
 */
//企鹅类
public class Penguin {
	private String name;// 名字
	private int health;// 健康值
	private String sex;// 性别
	private int love;// 亲密度

	// 快捷键alt+shift+s
	// 输出企鹅信息
	public void print() {
		System.out.println("宠物的自白:\n我的名字叫" + this.name + ",健康值是" + this.health + ",和主人的亲密度是" + this.love + ",性别是:"
				+ this.sex + "。");
	}

	public String getName() {
		return name;
	}

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

	public int getHealth() {
		return health;
	}

	public void setHealth(int health) {
		if (health < 60 || health > 100) {
			System.out.println("宠物的健康值只能在0-100之间,默认值60!");
			this.health = 60;
			return;
		}

		this.health = health;
	}

	public String getSex() {
		return sex;
	}

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

	public int getLove() {
		return love;
	}

	public void setLove(int love) {
		if (love < 60 || love > 100) {
			System.out.println("宠物的亲密度只能在60-100之间,默认值60!");
			this.love = 60;
			return;
		}

		this.love = love;
	}

}
package dh03;

/**
 * 
 * @author XXX 保证健康值的有效性(0-100),否则取默认值60 保证亲密度的有效性(0-100),否则取默认值60
 *         2023年6月9日下午4:55:22
 */
//狗类
public class Dog {
	private String name;// 名字
	private int health;// 健康值
	private String sex;// 性别
	private int love;// 亲密度

	// 快捷键(alt+shift+s)
	
	// 输出狗信息
	public void print() {
		System.out.println("宠物的自白:\n我的名字叫" + this.name + ",健康值是" + this.health + ",和主人的亲密度是" + this.love + "性别是:"
				+ this.sex + "。");
	}

	public String getName() {
		return name;
	}

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

	public int getHealth() {
		return health;
	}

	public void setHealth(int health) {
		if (health < 60 || health > 100) {
			System.out.println("宠物的健康值只能在0-100之间,默认值60!");
			this.health = 60;
			return;
		}

		this.health = health;
	}

	public String getSex() {
		return sex;
	}

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

	public int getLove() {
		return love;
	}

	public void setLove(int love) {
		if (love < 60 || love > 100) {
			System.out.println("宠物的亲密度只能在60-100之间,默认值60!");
			this.love = 60;
			return;
		}

		this.love = love;
	}

}

测试类:

package dh03;
//测试类

import java.awt.im.InputContext;
import java.util.Scanner;


public class TestPenguin {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("欢迎来到宠物店!");
		System.out.print("请输入要领养宠物的名字:");
		String name =sc.next();
		System.out.print("请输入要领养宠物的类型:(1、狗狗 2、企鹅)");
		int typeNo =sc.nextInt();
		switch (typeNo) {
		case 1:
			//创建狗狗对象
			System.out.print("请选择狗狗的性别:(1、公 2、母)");
			int sexId1 =sc.nextInt();
			String sex1 = (sexId1==1)?"公":"母";
			System.out.print("请输入狗狗的健康值(1~100之间):");
			int health1 = sc.nextInt();
			System.out.print("请输入狗狗的亲密度:");
			int love1 =sc.nextInt();
			//
			Dog dog = new Dog();
			dog.setName(name);
			dog.setHealth(health1);
			dog.setSex(sex1);
			dog.setLove(love1);
			dog.print();
			break;
		case 2:
			//创建企鹅对象
			System.out.print("请选择企鹅的性别:(1、Q仔 2、Q妹)");
			int sexId =sc.nextInt();
			String sex = (sexId==1)?"Q仔":"Q妹";
			System.out.print("请输入企鹅的健康值(1~100之间):");
			int health = sc.nextInt();
			System.out.print("请输入企鹅的亲密度:");
			int love =sc.nextInt();
			//创建企鹅对象
			Penguin p =new Penguin();
			p.setName(name);
			p.setHealth(health);
			p.setSex(sex);
			p.setLove(love);
			p.print();
			break;	
			
		default:
			System.out.println("暂时没有这个类型的宠物");
			break;
		}
		
		
	}
	

}

2.选民投票

----------------------------静态方法的使用--------------------------------

package dh03;

/**
 * @author XXX 模拟实现选民投票过程: 一群选民进行投票, 每个选民只允许投一次票, 并且当投票总数达到100时,就停止投票
 *         2023年6月10日下午2:16:16
 */
//选民类
public class Voter {
	// 目前投票数,被所有的的选民实例共享
	static int count;

	// 投票总数最大值,100时,就停止投票
	static final int MAX_COUNT = 100;
	
	// 选民名字
	private String name;

	public Voter() {
	}

	public Voter(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

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

	// 投票方法
	public void vote() {
		if(count == MAX_COUNT) {
			System.out.println("投票总数达到100时,停止投票");
			return;
		}
		else {
			count++;
			System.out.println(this.name+"投票成功,当前票数为:"+count);	
		}
	}

}

测试类:

package dh03;

public class TestVoter {

	public static void main(String[] args) {
		Voter v1 = new Voter("张三");
		v1.vote();
		Voter v2 = new Voter("李四");
		v2.vote();
		Voter v3 = new Voter("王五");
		v3.vote();

		
		for (int i = 1; i <=97; i++) {
			Voter v = new Voter("v"+i);
			v.vote();
		}
		Voter v4 = new Voter("马六");
		v4.vote();

		
	}

}

3.使用继承实现电子宠物系统

        该题同之前、后续等题。

4.游戏开发-面向对象

1.某公司要开发新游戏,请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精
设定
1)蛇怪类:
属性包括:怪物名字,生命值,攻击力
方法包括:攻击,移动(曲线移动),补血(当生命值<10时,可以补加20生命值)
2)蜈蚣精类:
属性包括:怪物名字,生命值,攻击力
方法包括:攻击,移动(飞行移动)

要求
1)分析蛇怪和蜈蚣精的公共成员,提取出父类—怪物类
2)利用继承机制,实现蛇怪类和蜈蚣精类
3)攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力
4)编写测试类,分别测试蛇怪和蜈蚣精的对象及相关方法

蛇怪类:

package dh03.monster;
//蛇精类
public class Snake extends Monster {
	
	public Snake(String name) {
		super(name);
	}	
	public void addHP(Centipede centipede)  {
		super.getHP();
		super.setHP(super.getHP() - centipede.getATK());
		System.out.print("目前血量:"+super.getHP()+"\t蜈蚣开始攻击");
		System.out.println(super.getHP());
		if(super.getHP()<=10) {
			super.setHP(super.getHP() - centipede.getATK());
		
		}
	}
	
}

蜈蚣精类:

package dh03.monster;

//蜈蚣类
public class Centipede extends Monster {
	public Centipede(String name) {
		super(name);
	}

	public void addHP(Snake snake)  {
		super.getHP();
		super.setHP(super.getHP() -snake.getATK());
		System.out.print("目前血量:"+super.getHP()+"\t蛇开始攻击");
		System.out.println(super.getHP());
		if(super.getHP()<=10) {
			super.setHP(super.getHP() -snake.getATK());
		}
	}
}

父类--怪兽类:

package dh03.monster;

/**
 * 
 * @author XXX 1.某公司要开发新游戏,请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精 设定 1)蛇怪类: 属性包括:怪物名字,生命值,攻击力
 *         方法包括:攻击,移动(曲线移动),补血(当生命值<10时,可以补加20生命值) 2)蜈蚣精类: 属性包括:怪物名字,生命值,攻击力
 *         方法包括:攻击,移动(飞行移动) 2023年6月12日下午3:55:48
 */
public class Monster {

	private String name;// 姓名
	private int HP;// 生命值
	private int ATK;// 攻击力
//----------------------------------

	public Monster(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public int getHP() {
		return HP;
	}

	public void setHP(int hP) {
		HP = hP;
		//补血操作
		if(HP<10) {
			HP = HP + 20;
			System.out.println("血量过低,自动补血20,目前血量:"+HP);
		}
	}

	public int getATK() {
		return ATK;
	}

	public void setATK(int aTK) {
		ATK = aTK;
	}

//----------------------------------
	// 攻击方法:
	public void gongji() {
		System.out.println(this.name + "发动了攻击操作" + "\t生命值:" + this.HP + "\t攻击力:" + this.ATK);
	}
	// 移动方法

	public void move(String x) {
		if(x.equals("飞行")) {
			System.out.println("移动(飞行移动))");
		}
		else if(x.equals("曲线")) {
			System.out.println("移动(曲线移动))");
		}else {
			System.out.println("没有这个移动的方式,仅支持飞行或曲线移动");
		}
		
	}

}

测试类:

package dh03.monster;

//测试类
public class TestMonster {

	public static void main(String[] args) {
		// 蛇精类
		Snake snake = new Snake("YJZ");
		snake.setHP(50);
	
		snake.setATK(9);
		snake.move("曲线");
		snake.gongji();
		
		// 蜈蚣精类
		Centipede centipede = new Centipede("ZJY");
		centipede.setHP(55);
		centipede.setATK(7);
		for (int i = 0; i < 10; i++) {
			snake.addHP(centipede);
			centipede.addHP(snake);
		}
		centipede.move("飞行");

	}

}

5.信息输出-面向对象

请用面向对象的思想,设计自定义类描述演员和运动员的信息
设定
1)演员类:
属性包括:姓名,年龄,性别,毕业院校,代表作
方法包括:自我介绍
2)运动员类:
属性包括:姓名,年龄,性别,运动项目,历史最好成绩
方法包括:自我介始
要求
3)分析演员和运动员的公共成员,提取出父类—人类
4)利用继承机制,实现演员类和运动员类
5)编写测试类,分别测试人类,演员类和运动员类对象及相关方法
6)定义名为act的包存人类,演员类,运动员类和测试类

演员类:

package dh03.act;
/**
 * 演员类
 * @author XXX
 * 
 * 2023年6月13日上午9:38:18
 */
public class Performer extends Human{

	private String graduation = "家里蹲大学";//毕业院校
	private String masterpiece = "X你太美";//代表作
	
	public Performer(String name) {
		super(name);
	}
	
	//自我介绍方法
		public void show() {
			super.show();
			System.out.println("毕业院校:"+this.graduation+"\t代表作:"+this.masterpiece);
			
		}
		
}

运动员类:

package dh03.act;
/**
 * 运动员类
 * @author XXX
 * 
 * 2023年6月13日上午9:38:06
 */
public class Athlete extends Human{

	private String project = "rap";//项目
	private String best = "第一";//最好成绩
	
	public Athlete(String name) {
		super(name);
	}
	
	
	public void show() {
		super.show();
		System.out.println("项目:"+this.project+"\t\t最好成绩:"+this.best);	
		
	}
	
}

父类--人类:

package dh03.act;
/**
 * 父类-人类
 * @author XXX
 * 
 * 2023年6月13日上午9:38:38
 */
public class Human {
	private String name;
	private int age;
	private String sex;
	
	//自我介绍方法
	public void show() {
		System.out.println("姓名:"+this.name+"\t年龄:"+this.age+"\t性别:"+this.sex);
	}
	public Human(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

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

	public String getSex() {
		return sex;
	}

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

	
}

测试类:

package dh03.act;
/**
 * 测试类
 * @author XXX
 * 
 * 2023年6月13日上午11:15:54
 */
public class Test {

	public static void main(String[] args) {
		//演员
		Performer performer = new Performer("爱kun");
		performer.setAge(18);
		performer.setSex("男");
		performer.show();
		//运动员
		Athlete athlete = new Athlete("kun哎");
		athlete.setAge(22);
		athlete.setSex("女");
		athlete.show();

	}

}

6.电子宠物系统

狗类:

package dh03.pet;

/**
 * 
 * @author XXX 保证健康值的有效性(0-100),否则取默认值60 保证亲密度的有效性(0-100),否则取默认值60
 *         2023年6月9日下午4:55:22
 */
//狗类
public class Dog extends Pet {	
	private String type;//狗的品种
	public Dog(String name) {
		super(name);
	}
	
	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public void print() {
		super.print();
		System.out.println("我的品种是:"+this.type);
	}
	
}
	

企鹅类:

package dh03.pet;

/**
 * 
 * @author XXX 保证健康值的有效性(0-100),否则取默认值60 保证亲密度的有效性(0-100),否则取默认值60
 *         2023年6月9日下午4:55:22
 */
//企鹅类
public class Penguin extends Pet{
	public Penguin(String name) {
		super(name);
	}
}

父类---宠物类:

package dh03.pet;
/**
 * 
 * @author XXX
 * 使用继承优化电子宠物系统
 * 2023年6月12日下午2:42:41
 */
public class Pet {
	private String name;// 名字
	private int health;// 健康值
	private String sex;// 性别
	private int love;// 亲密度

	public Pet(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public int getHealth() {
		return health;
	}

	public void setHealth(int health) {
		if (health < 60 || health > 100) {
			System.out.println("宠物的健康值只能在0-100之间,默认值60!");
			this.health = 60;
			return;
		}

		this.health = health;
	}

	public String getSex() {
		return sex;
	}

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

	public int getLove() {
		return love;
	}

	public void setLove(int love) {
		if (love < 60 || love > 100) {
			System.out.println("宠物的亲密度只能在60-100之间,默认值60!");
			this.love = 60;
			return;
		}

		this.love = love;
	}

	//宠物独白
	public void print() {
		System.out.println("宠物的自白:\n我的名字叫" + this.name + ",健康值是" + this.health + ",和主人的亲密度是" + this.love + ",性别是:"
				+ this.sex + "。");
	}
	
	
}

测试类:

package dh03.pet;

import java.util.Scanner;
/**
 * 测试类
 * @author XXX
 * 
 * 2023年6月13日上午9:34:48
 */
public class TestPet {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("欢迎来到宠物店!");

		System.out.print("请输入要领养宠物的类型:(1、狗狗 2、企鹅)");
		int typeNo =sc.nextInt();
		switch (typeNo) {
		case 1:
			Dog dog = new Dog("张三");
			dog.setHealth(-100);
			dog.setSex("公");
			dog.setLove(-100);
			dog.setType("哈士奇");
			dog.print();
			break;
		case 2:
			//创建企鹅对象
			Penguin p =new Penguin("李四");
	
			p.setHealth(60);
			p.setSex("母");
			p.setLove(100);
			p.print();
			break;	

		default:
			System.out.println("暂时没有这个类型的宠物");
			break;
		}
		

	}

}

7.程序分析

public class A{
    public A(){
        System.out.println("a");
    }
 }


 public class B extends A{
     public B(){
    System.out.println("b");

    }

 }


 B b = new B();

输出结果为:ab


http://lihuaxi.xjx100.cn/news/1241523.html

相关文章

云服务器上使用Docker Compose创建Redis三主三从集群

一、环境 云服务器Ubuntu20.4Dokcer 24.0.2 二、步骤 目录结构是这样&#xff1a; 绿色的目录是用来存储容器中的文件&#xff0c;不需要我们手动创建&#xff0c;将路径配置在配置文件中即可。黑色的目录和文件需要自己手动创建。 我们一共创建7个容器&#xff1a; redis…

java基础(多线程)-常用方法具体使用

一、Thread.start()方法 start()方法&#xff1a;启动子线程 new Thread();当前线程的状态为NEW 调用start()方法之后当前线程的状态变为RUNNABLE 二、Thread.sleep()静态方法 1. 调用sleep会让当前线程从Running进入Timed Waiting 状态 2.其他线程可以使用interrupt方法…

散热差、设计古板,因循守旧的联想Thinkpad还能获得忠粉的青睐吗?

拥有航天梦想的联想ThinkPad&#xff0c;在5月18日的新品发布会上&#xff0c;再次与中国航天太空创想达成了合作&#xff0c;将整场发布会的格调提升到了没有“边际”的高度。 发布会上&#xff0c;联想ThinkPad宣布了几款新品的面世&#xff0c;产品性能的升级和优化必不可少…

电脑多久重装一次系统比较好

在长时间使用电脑后&#xff0c;一些用户可能会考虑重装系统来提升性能和稳定性。然而&#xff0c;电脑重装系统的频率是一个有争议的问题。本文将探讨电脑重装系统的最佳频率&#xff0c;以帮助您做出明智的决策。 工具/原料&#xff1a; 系统版本&#xff1a;win7旗舰版 品…

新能源汽车保养vr仿真教学软件为职业培训带来新的思路和方法

电动车电池更换VR虚拟体验是一种利用VR虚拟现实技术实现对电动车电池更换进行模拟仿真演示和实操训练的虚拟仿真实验教学课件&#xff0c;相比传统教学模式&#xff0c;有效提高学生的实践能力和技能水平。 通过VR技术模拟现场&#xff0c;使培训人员可以身临其境滴观摩操作过程…

前端面试经验技巧分享

&#x1f469; 个人主页&#xff1a;不爱吃糖的程序媛 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、CSDN内容合伙人&#xff0c;专注于前端各领域技术&#xff0c;成长的路上共同学习共同进步&#xff0c;一起加油呀&#xff01; ✨系列专栏&#xff1a;前端…

【UE】玻璃材质

效果 步骤 1. 新建一个材质&#xff0c;这里命名为“M_GLASS” 双击打开“M_GLASS”&#xff0c;左下角混合模式设置为半透明 光照模式设置为表面前向着色 将基础颜色提升为参数 同样还需提升为参数的有“高光度”、“粗糙度”、“不透明度”、“折射” 设置高光度的默认值和最…

Go 框架 iris 文档

目录 文章目录 安装[故障 排除](https://www.iris-go.com/docs/#/?idtroubleshooting) 快速入门基准接口示例使用获取、发布、放置、修补、删除和选项路径中的参数查询字符串参数多部分/乌伦编码形式再比如&#xff1a;查询帖子表单查询和发布表单参数上传文件单个文件多个文件…