面向对象练习(3)

封装与继承


目录

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

你可能感兴趣的:(面向对象,java,eclipse,面向对象,学习)