java类的继承与多态实验报告

实验名称 类的继承与多态
实验类型 验证性 实验学时 2
实验目的
1.掌握方法的继承,重载与覆盖。2.掌握抽象类的定义与继承。3.理解多态的概念,掌握接口的实现方法。
实验设备
Windows计算机、JDK开发包、eclipse软件开发工具。
一、实验原理(要求、任务等)
1、类的继承性
继承是一种由已有的类创建新类的机制。利用继承,可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的属性和行为,并根据需要增加自己的新的属性和行为。由继承而得到的类称为子类,被继承的类称为父类(超类)。Java不支持多重继承(子类只能有一个父类)。
2、多态性
多态性就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为。
当一个类有很多子类时,并且这些子类都重写了父类中的某个方法。那么当子类创建的对象的引用放到一个父类的对象中时,就得到了该对象的一个上转型对象,那么这个上转的对象在调用这个方法时就可能具有多种形态。

二、实验内容和步骤
使用面向对象的多态性模仿会员卡消费系统,设计会员卡类,可派生不同的会员卡类型,当使用不同的会员卡消费时其折扣不同。如一般会员卡消费打9折;VIP会员卡打7折;超级VIP卡打5折。其具体的实现效果如下图所示:

输入应消费的金额,选择相应的会员卡,会显示实际的应付金额和消费状态信息。
实验步骤:
1、设计会员卡类,包含卡类型和卡内金额两个属性。
2、由会员卡类进一步派生出不同类型的会员卡,如:一般会员卡消费打9折;VIP会员卡打7折;超级VIP卡打5折。
3、对不同会员卡类进行具体实现。
4、设计并实现刷卡机类,主要用于人机交互和显示消费状态信息。
5、创建不同类型会员卡的具体对象,并进行相应调用显示消费状态信息。
其程序实现后的项目结构如下图所示:

三、实验结果与分析
详细代码:

public abstract class Card{
	String type;
	float amount;
	public Card(){

	}
	public Card(String type){
		this.type = type;
	}
	public Card(String type, int amount){
		this.type = type;
		this.amount = amount;
	}
	public String getType(){
		return type;
	}
	public boolean comsume(float totalPrice){
		if (this.amount >= this.shouldPay(totalPrice)){
			this.amount = this.amount - this.shouldPay(totalPrice);
			return true;
		} else{
			return false;
		}
	}
	public abstract float shouldPay(float totalPrice);
	public float getAmount(){
		return amount;
	}
	public void setAmount(float amount){
		this.amount = amount;
	}
}

public class generalCard extends Card{
	public float shouldPay(float totalPrice) {
		totalPrice = totalPrice * 0.9f;
		return totalPrice;
	}
}

public class vipCard extends Card{
	public float shouldPay(float totalPrice) {
		totalPrice = totalPrice * 0.7f;
		return totalPrice;
	}
}


public class svipCard extends Card{
	public float shouldPay(float totalPrice) {
		totalPrice = totalPrice * 0.5f;
		return totalPrice;
	}
}

public class POS {
	public static boolean slide(Card mc,float cosume) {
		return mc.comsume(cosume);
	}
}


public class test {
	public static void main(String[] args) {
	    float cosumePrice=100.0f;
	    System.out.println("消费金额为"+cosumePrice);
	    generalCard mc=new generalCard();
	    mc.amount=150;
	    if(POS.slide(mc,cosumePrice)){
	    	System.out.println("刷卡成功");
	    	System.out.println("余额为"+mc.getAmount());
	    }
	    else{
	    	System.out.println("卡内余额不足,请充值");
	    }
	}
}

输出结果如下图所示:

代码思路分析:
首先要创建一个会员卡Card类,里面包含卡类型和卡内金额两个属性。一般会员卡、vip会员卡和超级vip会员卡都是他的子类。通过分析可知,子类继承父类的一些属性和功能,但是都要重写实际付款金额shouldPay这个方法。这个时候就可以将shouldPay方法写成抽象方法,以此同时,父类必须要写成抽象类。这三个子类只用重写父类的shouldPay方法。将传过来的参数乘以打的折数之后再返回。会员卡类里还要写一个判断卡内余额和应付金额的比较的comsume方法。然后就是还要写一个POS机类。这个类里面写了一个slide方法,这个方法传过来两个参数,第一个参数是Card类型,因为Card是这三个子类的上级父类,在运行的时候还是看的是(右边)子类。这里用的是上转型对象。然后这个方法调用了comsume方法,返回给主函数一个boolean值。然后test类写下要测试的值,运行之后即可看到结果。

四、总结与心得体会
思考题
1、会员卡类中定义了哪些方法,都有什么意义?
首先定义了三个构造方法,无参构造方法必须要写,子类默认继承父类的无参构造方法。有参构造方法用来初始化。然后getType、getAmount方法用来获取type和amount。然后comsume用来表示是否支付成功。shouldPay方法是抽象方法用来让子类重写。setAmonut方法是给amount重新赋值。
2、如何调用不同类型会员卡类中所重写的方法?
先将要调用类型会员卡类实例化为对象,然后对象.方法名调用即可。
总结
子类会继承父类的属性和方法。方法的继承就是原封不动的被继承下来,重载就是在子类中写一个父类方法名一样的,但是参数和返回值等不一样的方法。方法的重写就是和父类的方法框架一模一样,但是内容不一样。抽象类不可以创建对象,抽象类里面一般会有抽象方法。抽象类声明时,只需要在class前加一个abstract。抽象方法所在的类必须是抽象类。多态性就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为。当一个类有很多子类时,并且这些子类都重写了父类中的某个方法。那么当子类创建的对象的引用放到一个父类的对象中时,就得到了该对象的一个上转型对象,那么这个上转的对象在调用这个方法时就可能具有多种形态。

  • 10
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的继承面向对象编程中的一种重要概念,通过继承可以实现之间的父子关系,子可以继承的属性和方法。在继承关系中,子可以对父的方法进行重载和覆盖,从而实现多态的概念。 通过继承,子可以继承的非私有成员变量和方法。这样可以实现代码的复用,避免重复编写相似的代码。通过继承,可以在子中调用父的方法,也可以在子中新增自己特有的方法和属性。子还可以对从父继承来的方法进行修改,以适应自己的需求。 多态是指同一类型的对象,在不同的状态下表现出不同的行为。在Java中,多态性可以通过继承和方法的重写实现。当父的引用指向子的实例时,可以通过该引用调用子中重写的方法,实现不同的对象调用同一个方法产生不同的结果。多态可以提高代码的灵活性和扩展性,使得程序更易于维护和扩展。 在Educoder平台上,可以通过练习和编程任务来学习和掌握Java继承多态。通过编写继承的子,重写父的方法以及引用父的实例来实现多态,可以更好地理解和应用这两个概念。平台提供了丰富的练习题和编程任务,帮助学习者提高对继承多态的理解和应用能力。 总之,Java中的继承多态面向对象编程中的重要概念,通过继承可以实现代码的复用,多态可以实现不同对象的不同行为。在Educoder平台上通过练习和编程任务,可以更好地学习和掌握这两个概念。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值