Java期末复习题之继承

点击返回标题->23年Java期末复习-CSDN博客


第1题.

设计一个学生类Student,其数据成员有name(姓名)、age(年龄)和degree(学位)。由Student类派生出本科生类Undergraduate和研究生类Graduate,本科生类Undergraduate增加成员specialty(专业),研究生类增加成员direction(研究方向)。每个类都有show()方法,用于输出数据成员信息。最后请输出下列信息:

public class Main {
    public static void main(String[] args) {
    	Undergraduate u1 = new Undergraduate("张三", 20, "本科", "通信");
    	Undergraduate u2 = new Undergraduate("李四", 21, "本科", "电子");
    	Graduate g1 = new Graduate("王五", 25, "硕士", "通信");
    	Graduate g2 = new Graduate("刘六", 36, "博士", "通信");
    	u1.show();
    	u2.show();
    	g1.show();
    	g2.show();
    }
}
abstract class Student{
	String name, degree;
	int age;
	abstract void show();//定义为抽象方法,Student也必须为抽象类
}
class Undergraduate extends Student{
	String specialty;

	Undergraduate(String name, int age, String degree, String specialty){//有参构造
		this.name = name;
		this.age = age;
		this.degree = degree;
		this.specialty = specialty;
	}
	@Override
	void show() {//实现父类抽象方法
		//格式化输出建议使用printf
		System.out.printf("姓名:%s\t年龄:%d\t学位%s\t专业:%s\n", 
				this.name, this.age, this.degree, this.specialty);
	}
}
class Graduate extends Student{
	String direction;
	
	Graduate(String name, int age, String degree, String direction){//有参构造
		this.name = name;
		this.age = age;
		this.degree = degree;
		this.direction = direction;
	}
	@Override
	void show() {//实现父类抽象方法
		//格式化输出建议使用printf
		System.out.printf("姓名:%s\t年龄:%d\t学位%s\t研究方向:%s\n", 
				this.name, this.age, this.degree, this.direction);
	}
}


第2题.

有工人、服务员、教师、科学家四种角色,其中服务员、工人只有月固定工资(元/月),教师除月固定工资外,还有课酬(元/节)。科学家除月固定工资外,还有科研激励奖(元/季度)。请通过继承设计出相应的类,将各种类型的员工的全年工资打印出来,并测试(张三、工人、4000元/月)、(李四、服务员、3500元/月)、(王五、教师、5000元/月、100元/节,200节/年)、(刘六、科学家、7000元/月、20000元/季度)。

public class Main{
	public static void main(String[] args) {
		profession p1 = new profession("张三", "工人", 4000);
		profession p2 = new profession("李四", "服务员", 3500);
		teacher t1 = new teacher("王五", "教师", 5000, 100, 200);
		scientist s1 = new scientist("刘六", "科学家", 7000, 20000);
		p1.show();
		p2.show();
		t1.show();
		s1.show();
	}
}
//有工人、服务员、教师、科学家四种角色,
//其中服务员、工人只有月固定工资(元/月),教师除月固定工资外,还有课酬(元/节)。科学家除月固定工资外,还有科研激励奖(元/季度)
//分析得出:工人和服务员可视作同类,下面命名为profession,教师和科学家可作为profession类的两个子类
class profession{
	String name, job;
	int salary;
	profession(){//无参构造供其子类的有参构造进行默认调用。(因为子类的构造方法如果没有用super关键字调用父类的构造方法,则会隐含一个super()去调用父类的无参构造)
		
	}
	profession(String name, String job, int salary){//有参构造
		this.name = name;
		this.job = job;
		this.salary = salary;
	}
	void show() {//此处不应定义为抽象方法,因为profession类存在需要示例化的对象(即工人或服务员)
		System.out.printf("%s、%s、%d元/月\n", this.name, this.job, this.salary);
	}
}
class teacher extends profession{
	int class_reward, class_nums;
	teacher(String name, String job, int salary, int class_reward, int class_nums){//有参构造
		this.name = name;
		this.job = job;
		this.salary = salary;
		this.class_reward = class_reward;
		this.class_nums = class_nums;
	}
	@Override
	void show() {
		System.out.printf("%s、%s、%d元/月、%d元/节, %d节/年\n", this.name, this.job, this.salary, this.class_reward, this.class_nums);
	}
	
}
class scientist extends profession{
	int research_reward;
	scientist(String name, String job, int salary, int research_reward){//有参构造
		this.name = name;
		this.job = job;
		this.salary = salary;
		this.research_reward = research_reward;
	}
	@Override
	void show() {
		System.out.printf("%s、%s、%d元/月、%d元/季度\n", this.name, this.job, this.salary, this.research_reward);
	}
	
}


第3题.

根据下述继承关系图,请完成父类Pet 、子类Dog、Penguin的设计,并写一个测试类,测试类中完成狗对象的创建与输出,企鹅对象的创建与输出。

public class Main{
	public static void main(String[] args) {
		//测试,对Dog类对象采取有参构造实例化并赋值,print()方法输出,对Penguin类对象采取无参构造实例化、setter方法赋值,getter方法配合printf输出
		Dog d = new Dog("小狗", 100, 20, "牧羊犬");
		d.print();
		
		Penguin p = new Penguin();
		p.setName("Q仔");
		p.setHealth(101);
		p.setLove(21);
		p.setSex("雄");
		System.out.printf("姓名:%s\t健康度:%d\t好感度:%d\t\t品系:%s\n", p.name, p.health, p.love, p.sex);
	}
}
abstract class Pet{
	String name;
	int health, love;
	
	abstract void print();
	abstract String getName();
	abstract int getHealth();
	abstract int getLove();
}
class Dog extends Pet{
	String strain;//品系
	Dog(){//无参构造
		
	}
	Dog(String name, int health, int love, String strain){//有参构造
		this.name = name;
		this.health = health;
		this.love = love;
		this.strain = strain;
	}
	void print() {
		System.out.printf("姓名:%s\t健康度:%d\t好感度:%d\t\t品系:%s\n", this.name, this.health, this.love, this.strain);
	}
	String getName() {
		// TODO Auto-generated method stub
		return this.name;
	}
	int getHealth() {
		// TODO Auto-generated method stub
		return this.health;
	}
	int getLove() {
		// TODO Auto-generated method stub
		return this.love;
	}
	
}
class Penguin extends Pet{
	String sex;//性别
	Penguin(){//无参构造
		
	}
	Penguin(String name, int health, int love, String sex){//有参构造
		this.name = name;
		this.health = health;
		this.love = love;
		this.sex = sex;
	}
	void print() {
		System.out.printf("姓名:%s\t健康度:%d\t好感度:%d\t性别:%s", this.name, this.health, this.love, this.sex);
		
	}
	String getName() {
		// TODO Auto-generated method stub
		return this.name;
	}
	int getHealth() {
		// TODO Auto-generated method stub
		return this.health;
	}
	int getLove() {
		// TODO Auto-generated method stub
		return this.love;
	}
	void setName(String name) {
		this.name = name;
	}
	void setHealth(int health) {
		this.health = health;
	}
	void setLove(int love) {
		this.love = love;
	}
	void setSex(String sex) {
		this.sex = sex;
	}
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好的Java复习资料,参考参考!对第28题的系统说明 如何应用DataInputStream进行文件操作 彻底明白Java的IO系统 一. Input和Output 1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型: 1.1 以字节为导向的stream 以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型: 1) input stream: 1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用 2) StringBufferInputStream:把一个String对象作为InputStream 3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作 4) PipedInputStream:实现了pipe的概念,主要在线程中使用 5) SequenceInputStream:把多个InputStream合并为一个InputStream 2) Out stream 1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中 2) FileOutputStream:把信息存入文件中 3) PipedOutputStream:实现了pipe的概念,主要在线程中使用 4) SequenceOutputStream:把多个OutStream合并为一个OutStream 1.2 以Unicode字符为导向的stream 以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型: 1) Input Stream 1) CharArrayReader:与ByteArrayInputStream对应 2) StringReader:与StringBufferInputStream对应 3) FileReader:与FileInputStream对应 4) PipedReader:与PipedInputStream对应 2) Out Stream

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值