Java面向对象第三章封装与继承练习题

练习1:使用封装实现企鹅类

需求说明 使用封装实现电子宠物系统的企鹅类正确输入健康值和亲密度 保证健康值的有效性(0-100),否则取默认值60 保证亲密度的有效性(0-100),否则取默认值60

java 复制代码
package com.hz.ch01;
/**
  * 企鹅类
 * @author 26255
 *
 */

import java.util.Scanner;

public class Penguin {
	Scanner sc = new Scanner(System.in);
	private int health;
	private int intimacy;
	
	public int getHealth() {
		health = sc.nextInt();
		if(health<0){
			health = 60;
		}
		return health;
		
	}
	
	public int getIntimacy() {
		intimacy = sc.nextInt();
		if(intimacy<0) {
			intimacy = 60;
		}
		return intimacy;
	}

}
java 复制代码
package com.hz.ch01;

import java.util.Scanner;

public class Lianxi1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		Penguin m = new Penguin();
		System.out.println("欢迎您来到宠物店!");
		System.out.print("请输入要领养宠物的名字:");
		String name = sc.next();
		System.out.print("请选择要领养的宠物类型:(1.狗狗、2.企鹅)");
		int l = sc.nextInt();
		String x ;
		
		if(l==1) {
			System.out.println("请选择狗狗的性别");
			 x = sc.next();
		}else {
				System.out.println("请选择企鹅的性别");
				 x = sc.next();
		}
		System.out.println("请输入"+name+"的健康值:");
		
		int dd = m.getHealth();
		
		System.out.println("请输入"+name+"亲密度:");
		int qw = m.getIntimacy();
		System.out.println("宠物的自白:");
		System.out.println("我的名字叫"+name+"健康值是"+dd+"和主人的亲密度是"+qw+"我的性别是"+x);
		
	}

}
java 复制代码
欢迎您来到宠物店!
请输入要领养宠物的名字:11
请选择要领养的宠物类型:(1.狗狗、2.企鹅)1
请选择狗狗的性别
1
请输入11的健康值:
11
请输入11亲密度:
22
宠物的自白:
我的名字叫11健康值是11和主人的亲密度是22我的性别是1

练习2:选民投票

需求说明 模拟实现选民投票过程:一群选民进行投票,每个选民只允许投一次票,并且当投票总数达到100时,就停止投票

java 复制代码
package com.hz.ch02;

import java.util.Scanner;

/**
 * 选民投票类
 * @author 26255
 *
 */
public class Vote {
	Scanner sc = new Scanner(System.in);
	private String name;
	private int p ;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getP() {
		System.out.println("现有票数:");
		p = sc.nextInt();
		
		for(;p>=0;p++) {
			
			
			if(p<100) {
				System.out.println("请输入名字:");
				name = sc.next();
				System.out.println(name+"投票一次现有票数"+(p+1));
			}else {
				System.out.println(name+"票数已满100,程序结束");
				break;
			}
			
		}
		
		return p;
	}
	public void setP(int p) {
		this.p = p;
	}
	
	

}
java 复制代码
package com.hz.ch02;

public class Lianxi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Vote m = new Vote();
		m.getP();
	}

}

运行:

java 复制代码
现有票数:
99
请输入名字:
111
111投票一次现有票数100
111票数已满100,程序结束

练习3:使用继承实现电子宠物系统

需求说明 使用继承优化电子宠物系统 抽取父类,创建子类 在子类中使用super调用父类构造方法

java 复制代码
package com.hz.ch03;
/**
 * 狗狗类
 * @author 26255
 *
 */
public class Dog extends Pet {
		private String strain;//品种

		public String getStrain() {
			return strain;
		}

		public void setStrain(String strain) {
			this.strain = strain;
		}
		
		public Dog() {
			
		}
		public Dog(String name,int health,int love,String strain) {
			super(name,health,love);
			this.strain = strain;
		}
		public void print() {
			super.print();
			System.out.println("我是一只"+strain);
		}
		
}
java 复制代码
package com.hz.ch03;
/**
 * 企鹅类
 * @author 26255
 *
 */
public class Penguin extends Pet{
	private String sex;//性别

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	
	public Penguin() {
		
	}
	
	public Penguin(String name,int health,int love,String sex) {
		super(name,health,love);
		this.sex = sex;
	}
	
	public void print() {
		super.print();
		System.out.println("我的性别是"+sex);
	}
	
}
java 复制代码
package com.hz.ch03;
/**
 * 宠物类
 * @author 26255
 *
 */
public class Pet {
		private String name;//姓名
		private int health;//健康值
		private int love;//亲密度
		
		
		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getHealth() {
			return health;
		}
		public  Pet() {
			
		}
		public Pet(String name,int health,int love) {
			this.name = name;
			this.health = health;
			this.love = love ;
		}
		public void setHealth(int health) {
			if(health<0 || health>100) {
				System.out.println("健康值应该在0-100之间,默认值为60。");
				this.health = 60;
				return;
			}
			this.health = health;
		}
		public int getLove() {
			return love;
		}
		public void setLove(int love) {
			if(love<0 || love>100) {
				System.out.println("亲密值应该在0-100之间,默认值为60。");
				this.love = 60;
				return;
			}
			this.love = love;
		}
		
		public void  print() {
			
			System.out.println("宠物的自白:");
			System.out.println("我的名字叫"+name+",健康值是"+health+",和主人的亲密度是"+love);
		}
		
}
java 复制代码
package com.hz.ch03;

public class Exercise {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Dog dog = new Dog("zhang",77,49,"中华田园犬");
		Penguin pg = new Penguin("ddd",100,65,"q妹");
		dog.print();
		pg.print();
	}

}

运行:

java 复制代码
宠物的自白:
我的名字叫zhang,健康值是77,和主人的亲密度是49
我是一只中华田园犬
宠物的自白:
我的名字叫ddd,健康值是100,和主人的亲密度是65
我的性别是q妹

1.某公司要开发新游戏,请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精

设定
1)蛇怪类:
属性包括:怪物名字,生命值,攻击力
方法包括:攻击,移动(曲线移动),补血(当生命值<10时,可以补加20生命值)
2)蜈蚣精类:
属性包括:怪物名字,生命值,攻击力
方法包括:攻击,移动(飞行移动)
要求
1)分析蛇怪和蜈蚣精的公共成员,提取出父类---怪物类
2)利用继承机制,实现蛇怪类和蜈蚣精类
3)攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力
4)编写测试类,分别测试蛇怪和蜈蚣精的对象及相关方法

java 复制代码
package com.hz.ch04;
/**
 * 蜈蚣类
 * @author 26255
 *
 */
public class Centipede extends Monster{

	public Centipede(String name, double life, double attack) {
		super(name, life, attack);
		
	}
	
	public void move() {
		System.out.println("飞行移动");
		
	}
}
java 复制代码
package com.hz.ch04;



/**
 * 怪物类
 * @author 26255
 *
 */
public class Monster {
	private String name;//名字
	private double life;//生命
	private double attack;//公鸡力
	
	
	public Monster(String name, double life, double attack) {
		super();
		this.name = name;
		this.life = life;
		this.attack = attack;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getLife() {
		return life;
	}
	public void setLife(double life) {
		this.life = life;
	}
	public double getAttack() {
		return attack;
	}
	public void setAttack(double attack) {
		this.attack = attack;
	}
	//公鸡方法
	public void attack(Monster monster) {
		System.out.println(name+"展开了攻击");
		System.out.println("生命值是:"+life);
		System.out.println("攻击力是:"+attack);
		monster.life -= attack;
		System.out.println(name+"正在攻击"+monster.name+","+monster.name+"掉血"+attack+"剩余血量"+life);
		
	}
	public void move() {
		System.out.println(name+"移动了");
	}
	
	
}
java 复制代码
package com.hz.ch04;
/**
 * 蛇怪类
 * @author 26255
 *
 */
public class Snake extends Monster{

	public Snake(String name, double life, double attack) {
		super(name, life, attack);
		
	}

	public void move() {
		System.out.println("曲线移动");
	}
	public void buxue() {
		if(getLife() < 10 &&getLife()>0) {
			
			System.out.println("补血术当前为:"+getLife()+20);
		}
	}
	
}
java 复制代码
package com.hz.ch04;

import java.util.Scanner;

public class Exercise {

	public static void main(String[] args) {
		Snake snake = new Snake("蛇怪",100,100);
		snake.move();
		snake.buxue();
		
		Centipede centipede = new Centipede("蜈蚣怪",200,10);
		centipede.move();
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入1开始游戏,输入0结束游戏");
		int sum = sc.nextInt(); 
		if(sum ==1 ) {
			System.out.println("开始游戏");
			System.out.println(centipede.getName()+"  VS  "+snake.getName()+"对战");
			for(int i = 1 ;i>0;i++) {
				System.out.println("第"+i+"回合");
				snake.attack(centipede);
				if(centipede.getLife()<=0) {
					System.out.println("蜈蚣死亡,蛇怪获胜!");
					break;
				}
				centipede.attack(snake);
				if(snake.getLife()<=0) {
					System.out.println("蛇怪获胜,蜈蚣死亡!");
					break;
				}
			}
		}else if(sum == 0) {
			System.out.println("游戏结束!");
		}else {
			System.out.println("输入错误,请重新输入");
		}
	}
	
}

运行:这个偷懒了

java 复制代码
曲线移动
飞行移动
请输入1开始游戏,输入0结束游戏1
开始游戏
蜈蚣怪  VS  蛇怪对战
第1回合
蛇怪展开了攻击
生命值是:100.0
攻击力是:100.0
蛇怪正在攻击蜈蚣怪,蜈蚣怪掉血100.0剩余血量100.0
蜈蚣怪展开了攻击
生命值是:100.0
攻击力是:10.0
蜈蚣怪正在攻击蛇怪,蛇怪掉血10.0剩余血量100.0
第2回合
蛇怪展开了攻击
生命值是:90.0
攻击力是:100.0
蛇怪正在攻击蜈蚣怪,蜈蚣怪掉血100.0剩余血量90.0
蜈蚣死亡,蛇怪获胜!

2.请用面向对象的思想,设计自定义类描述演员和运动员的信息

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

java 复制代码
package com.hz.ch05;
/**
 * 演员类
 * @author 26255
 *
 */
public class Actor extends People {
	private String graduate = "坤学";
	private String masterpiece = "你太美";
	
	public Actor(String name) {
		super(name);
	}
	
	//自我介绍方法
		public void show() {
			super.show();
			System.out.println("毕业院校:"+this.graduate+"\t代表作:"+this.masterpiece);
			
		}
				
}
java 复制代码
ackage com.hz.ch05;
/**
 * 运动员类
 * @author 26255
 *
 */
public class Athletes extends People{
		private String project = "跳远";
		private String best = "第一";
		
		public Athletes(String name) {
			super(name);
		}
		public void show() {
			super.show();
			System.out.println("项目:"+this.project+"\t最好成绩"+this.best);
		}
}
java 复制代码
package com.hz.ch05;
/**
 * 人类
 * @author 26255
 *
 */
public class People {
	private String name;//姓名
	private int age ;//年龄
	private String sex;//性别
	//自我介绍
	public void show() {
		System.out.println("姓名:"+this.name+"\t年龄:"+this.age+"\t性别:"+this.sex);
	}
	
	public  People(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;
	}
	
}
java 复制代码
package com.hz.ch05;

public class Exercise {

	public static void main(String[] args) {
		Actor actor = new Actor("爱坤");
		actor.setAge(25);
		actor.setSex("男坤");
		actor.show();		
		Athletes athlete = new Athletes("坤坤");
		athlete.setAge(22);
		athlete.setSex("未知坤");
		athlete.show();
	}

}

运行:

java 复制代码
姓名:爱坤	年龄:25	性别:男坤
毕业院校:坤学	代表作:你太美
姓名:坤坤	年龄:22	性别:未知坤
项目:跳远	最好成绩第一

4.程序分析题:

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

}

public class B extends A{

public B(){

System.out.println("b");

}

}

B b = new B();

写出输出结果:

java 复制代码
package com.hz.ch06;

public class Aa {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B b = new B();
		
	}

}
java 复制代码
package com.hz.ch06;

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

   }
}
java 复制代码
package com.hz.ch06;

public class Q {
	public Q(){
		System.out.println("q");
	}

}

运行:

java 复制代码
q
b
相关推荐
考虑考虑8 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261359 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊10 小时前
Java学习第22天 - 云原生与容器化
java
渣哥12 小时前
原来 Java 里线程安全集合有这么多种
java
间彧12 小时前
Spring Boot集成Spring Security完整指南
java
间彧12 小时前
Spring Secutiy基本原理及工作流程
java
Java水解13 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆15 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学16 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole16 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端