面向接口编程和“开-闭”原则的JAVA编程

1.实验目的

在面向抽象编程的基础上,掌握使用接口进行程序设计的核心思想是使用接口回调,明白接口也可以体现程序设计的“开-闭”原则,即对扩展开放,对修改关闭。

2.实验要求

深刻理解面向接口编程和“开-闭”原则,要求会定义接口变量,该接口变量存放了实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法。

3.实验步骤:

1)定义接口,声明若干个abstract方法。
2)创建类,在类中定义若干个参数为接口类型的方法。
3)通过实现接口的类的对象回调类重写的接口方法
4)实现相应功能

4.实验代码

(1)定义接口与乘客

Passenger.java

package huidiao;

interface Pay{      //定义接口Pay
	double howMuch();  //计算需要多少钱
	String showType();  //显示现在所乘坐的车的类型
	void paid();    //方法:已支付
}
public class Passenger {
     public void setPay(Pay p) {   //乘车人支付
    	 double s=p.howMuch();  //接口回调
    	 String m=p.showType();  //接口回调
    	 System.out.println("司机:"+m+"已经到达目的地,一共"+s+"元,请扫码支付");
    	 System.out.println("乘客:好的,麻烦师傅等我拿一下手机......");
    	 System.out.println("手机:叮咚!");
    	 System.out.println("顾客:好了,师傅");
    	 p.paid(); //接口回调
     }
}

(2)汽车司机

CarDriver.java

package huidiao;
public class CarDriver implements Pay {    //定义私家车类使用Pay接口
   public double kilo;              //成员变量公里数
   public  Passenger passenger;    //公有成员变量乘车人
   public CarDriver(Passenger passenger) {  //构造函数
	   this.passenger=passenger;
   }
   public void setKilo(double k) {     //行驶里程
	   this.kilo =k;
   }
   public String showType() {
	   return "私家车";
   }
   public double howMuch() {         //怎么收费
	   double m;
	   m=8+1.5*(kilo-3);
	   return m;
   }
   public void paid() {           //对接口方法paid的重写
	   System.out.println("司机:已经收到车钱!");
	   System.out.println("司机:感谢您的乘坐,祝您旅途愉快");
   }
   public void pleasePay() {    //司机发起收钱
	   
	   passenger.setPay(this);
   }
}

(3)公交司机

Bus.java
package huidiao;

public class Bus implements Pay {    //定义公交类使用Pay接口
	   public double kilo;              //成员变量公里数
	   public  Passenger passenger;    //公有成员变量乘车人
	   public Bus(Passenger passenger) {  //构造函数
		   this.passenger=passenger;
	   }
	   public void makeKilo(double k) {     //行驶里程
		   this.kilo =k;
	   }
	   public String showType() {
		   return "公交车";
	   }
	   public double howMuch() {         //怎么收费
		   double m;
		   m=kilo/2.0;
		   return m;
	   }
	   public void paid() {           //对接口方法paid的重写
		   System.out.println("司机:已经收到车钱!");
		   System.out.println("司机:感谢您的乘坐,祝您旅途愉快");
	   }
	   public void pleasePay() {    //司机发起收钱
		   
		   passenger.setPay(this);
	   }
}

(4)主类

Mainclass.java
package huidiao;
import java.util.Scanner;
public class Mainclass {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
     Passenger Jack  = new Passenger();     //乘客Jack
     CarDriver Jan =  new CarDriver(Jack);  //私家车Jan
     Bus A189 = new Bus(Jack);              //公交车A189
     Scanner reader=new Scanner(System.in);
     double x;
     System.out.println("请输入里程数:");
     x=reader.nextDouble();                //输入里程数
     Jan.setKilo(x);
     Jan.pleasePay();
     Jan.paid();                           //Jack乘坐私家车行驶x米要付的钱
     System.out.printf("***********************************\n");
     A189.makeKilo(x);
     A189.pleasePay();
     A189.paid();                         //Jack乘坐公交车行驶x米要付的钱
     
	}

}

(5)说明

该程序充分体现了接口的“开-闭”原则,如果需要再添加一种乘车方式,只需再重新写一个类来实现接口Pay即可,而Passenger类不需要做任何改变(即对Passenger类的修改关闭)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值