本科课程【java程序设计】实验3 - 子类与继承编程练习

本科课程【java程序设计】实验3 - 子类与继承编程练习,第1张

大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.

近期会把自己本科阶段的一些课程设计、实验报告等分享出来,供大家参考,希望对大家有帮助。

博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html

一、 实验目的

1、 掌握子类的继承与子类对象的创建;
2、 掌握方法的继承与重写;
3、 掌握用上转型对象和接口回调实现运行时多态。

二、 实验内容 1. 实验任务
  1. 完成第5章习题5 使用抽象类设计一个动物的“模拟器”,希望可以模拟许多动物的叫声,要求使用上转型对象实现运行时多态。
  2. 货车要装载一批货物,货物有三种商品组成:电视、计算机和洗衣机。卡车需要计算出整批货物的重量。要求:
    1)有一个ComputeWeight接口,该接口中有一个方法:Public double computeWeight()
    2)有三个实现该接口的类:Television,Computer,WashMachine。这三个类通过实现computeWeight接口给出自重。
    3)有一个Truck类,该类用ComputeWeight接口类型的数组作为成员。那么该数组的成员就可以存放Television对象的引用,Computer对象的引用,WashMachine对象的引用。程序能输出Truck对象所装载的货物的总重量。
  3. 编程模拟中国人、美国人是人,四川人是 中国人。除主类外,程序还有4个类:People,ChinaPeople,AmericanPeople,SichuanPeople。其UML类图如下:

要求:
1)People类有两个protected属性和3个public 方法。
2)ChinaPeople类是People类的子类,新增了void chinaGongfu()方法。要求ChinaPeople类重写父类的3个方法。
3)AmericanPeople类是People类的子类,新增了void americanBoxing()方法。要求ChinaPeople类重写父类的3个方法。

  1. 有一个abstract 类,类名为Employee。Employee的子类有YearWorker、MonthWorker和WeekWorker。YearWorker对象按年领取薪水,MonthWorker按月领取薪水,WeekWorker按周领取薪水。要求如下:
    1)Employee类有一个abstract 方法: public abstract double earnings();
    2)子类必须重写父类的earnings()方法,给出各自领取报酬的具体方式。
    3)有一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。
    4)程序能输出Company对象一年需要支付的薪水总额。
2. 程序设计
abstract class Animal{
	abstract void cry();
	abstract void getAnimalName();
}

class Simulator{
	void playSound(Animal animal) {
		animal.cry();
		animal.getAnimalName();
	}
}

class Dog extends Animal{
	void cry() {
		System.out.println("汪汪汪");
	}
	
	void getAnimalName() {
		System.out.println("dog");
	}
}

class Cat extends Animal{
	void cry() {
		System.out.println("喵喵喵");
	}
	
	void getAnimalName() {
		System.out.println("cat");
	}
}

public class one {

	public static void main(String[] args) {
		Simulator simulator = new Simulator();
		simulator.playSound(new Dog());
		simulator.playSound(new Cat());
	}
}

interface ComputeWeight{
	public double computeWeight();
}

class Television implements ComputeWeight{

	@Override
	public double computeWeight() {
		// TODO Auto-generated method stub
		double weight = 40;
		System.out.println("Television的重量为:" + weight + "kg");
		return weight;
	}
	
}
class Computer implements ComputeWeight{

	@Override
	public double computeWeight() {
		// TODO Auto-generated method stub
		double weight = 5;
		System.out.println("Computer的重量为:" + weight + "kg");
		return weight;
	}
	
}
class WashMachine implements ComputeWeight{

	@Override
	public double computeWeight() {
		// TODO Auto-generated method stub
		double weight = 50;
		System.out.println("WashMachine的重量为:" + weight + "kg");
		return weight;
	}
	
}

class Truck{
	public ComputeWeight cw[];
	
	public void getWeight(ComputeWeight cw[]) {
		
		double totle = cw[0].computeWeight() + cw[1].computeWeight() + cw[2].computeWeight();
		System.out.println("总重量为:" + totle);
	}
}

public class two {
	public static void main(String[] args) {
		Truck truck = new Truck();
		ComputeWeight[] cw = {new Television(),new Computer(),new WashMachine()};
		truck.getWeight(cw);
	}
}

class People{
	protected double height;
	protected double weight;
	
	public void speakHello() {
		System.out.println("Hello 我是人");
	}
	public void averageHeight() {
		System.out.println("人的平均身高");
	}
	public void averageWeight() {
		System.out.println("人的平均体重");
	}
}

class ChinaPeople extends People{
	public void chinaGongfu() {
		System.out.println("chinaGongfu");
	}
	public void speakHello() {
		System.out.println("Hello 我是中国人");
	}
	public void averageHeight() {
		System.out.println("中国人的平均身高");
	}
	public void averageWeight() {
		System.out.println("中国人的平均体重");
	}
}
class AmericanPeople extends People{
	public void AmericanBoxing() {
		System.out.println("AmericanBoxing");
	}
	public void speakHello() {
		System.out.println("Hello 我是美国人");
	}
	public void averageHeight() {
		System.out.println("美国人的平均身高");
	}
	public void averageWeight() {
		System.out.println("美国人的平均体重");
	}
}
class SichuanPeople extends ChinaPeople{
	public void sichuanHotpot() {
		System.out.println("sichuanHotpot");
	}
	public void speakHello() {
		System.out.println("Hello 我是四川人");
	}
	public void averageHeight() {
		System.out.println("四川人的平均身高");
	}
	public void averageWeight() {
		System.out.println("四川人的平均体重");
	}
}

public class three {
	public static void main(String[] args) {
		
	}
}

abstract class Employee{
	public abstract double earning();
}

class YearWorker extends Employee{

	@Override
	public double earning() {
		// TODO Auto-generated method stub
		return 120000;
	}
	
}
class MonthWorker extends Employee{

	@Override
	public double earning() {
		// TODO Auto-generated method stub
		return 10000;
	}
	
}
class WeekWorker extends Employee{

	@Override
	public double earning() {
		// TODO Auto-generated method stub
		return 2500;
	}
	
}

class Company{

	public void getSalary(Employee[] employee) {
		double totle =0.0;
		for (Employee e : employee) {
			totle+=e.earning();
		}
		System.out.println("所需要支付的薪水总额为:" + totle);
	}
}

public class four {
	public static void main(String[] args) {
		Employee[] employee = {new YearWorker(),new YearWorker(),new MonthWorker(),new MonthWorker(),new WeekWorker()};
		Company company = new Company();
		System.out.print("两个年薪,一个月薪,两个周薪");
		company.getSalary(employee);
	}
}

3. 实验结果

无输出结果

三、 实验环境
  1. *** 作系统:WINDOWS 10
  2. 开发工具:JDK 1.8 和 Eclipse
  3. 实验设备:PC
四、总结

1)继承可以从基类中获得派生类中不曾定义过的成员,提高了编程效率;
2)继承与派生分为共有、私有、保护三种继承方式,其中共有使用最广泛,他使得派生类与基类中的成员有相同的属性;
3)在一个类中定义另一个类的对象时,此时初始化时要用对象名来调用初始化函数。调用对应的函数时,要用对象名来调用它的函数
4)类中abstract函数时,继承的类必须重写此方法

博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/867348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-12
下一篇 2022-05-12

发表评论

登录后才能评论

评论列表(0条)

保存