打印机
编码创建一个打印机类Printer,定义抽象方法print(),创建两个子类,即针式打印机类DotMatrixPrinter和喷墨打印机类InkpetPrinter,并在各自类中重写print(),编写测试类实现两种打印机打印。再添加一个激光打印机子类LaserPrinter,重写方法print(),修改测试类实现该打印机打印。
提示:利用向上转型,将子类对象赋给父类Printer的引用变量。
这里主要是训练,类的继承,子类对父类方法的重写,以及多态的实例解释
//定一个打印机类
public abstract class Printer {
public abstract void daying() ;
}
```//个体的实例化(其他几个实例代码一样,就是名字不同,就不多赘述)
public class DotMatrixPrinter extends Printer{
public void daying() {//对父类daying方法的重写
System.out.println("针式打印器");
}
}
public class PrinterText {
public static void main(String[] args) {
Printer p1 = new DotMatrixPrinter();// 创建父类的引用P1指向子类DotMatrixPrinter的一个对象
PrinterText.show(p1);
Printer p2 = new InkpetPrinter();
PrinterText.show(p2);
Printer p3 = new LaserPrinter();
PrinterText.show(p3);
}
public static void show(Printer printer) {
printer.daying();// 创建一个方法 输入一个父类类型的形参 printer,然后用printer调用父类的打印方法
}
}
租车付租金
进入界面,选择租期----》挑选轿车还是客车----》挑选车的类型----》显示金额,以及是否继续租车,最终得到总的租金。
//父类
import java.util.Scanner;
public abstract class Che {
// 属性
private int leix;//private 设置属性私有,防止其他类的方法随意访问(只能通过本类的setter设置数值,getter得到数值)
private int days;
private int pai;
private int money;
// 构造
// 方法
Scanner input = new Scanner(System.in);
//车牌是每个车共有的特点,所以放在父类中,提高代码效率,也方便扩展。
public void chepai() {
pai = (int) (Math.random() * 100000);
System.out.print("车牌号是:苏A" + pai);
}
//这里设置一个抽象方法,给子类重写,于此对应的,本类需要声明成为抽象类
public abstract void zu();
public int getDays() {//调用次方法,得到本类的属性days的数值
return days;
}
public void setDays(int days) {//调用次方法,设置本类的属性days的数值
this.days = days;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public int getLeix() {
return leix;
}
public void setLeix(int leix) {
this.leix = leix;
}
}
//实例轿车类
public class JiaoChe extends Che {
int xinghao;
public void zu() {
System.out.print("选择型号:(1.别克2.宝马):");
xinghao = input.nextInt();
switch (xinghao) {
case 1:
setMoney(getMoney() + getDays() * 100);//调用父类中的相关方法,进行设置以及取值
break;
case 2:
setMoney(getMoney() + getDays() * 200);
break;
default:
break;
}
}
}
//实例客车类
public class KeChe extends Che {
int sit;
public void zu() {
System.out.print("选择型号:(1.大于16座2.小于16座):");
sit = input.nextInt();
switch (sit) {
case 1:
setMoney(getMoney() + getDays() * 300);
break;
case 2:
setMoney(getMoney() + getDays() * 400);
break;
default:
break;
}
}
}
//租车测试类
import java.util.Scanner;
public class Chetext {
public static void main(String[] args) {
int sum = 0;
Che che = new JiaoChe();
Che ka = new KeChe();
boolean a = true;
Scanner input = new Scanner(System.in);
do {
System.out.print("输入租期:");
che.setDays(input.nextInt());
System.out.print("选择车的类型(1.轿车2.卡车):");
che.setLeix(input.nextInt());
switch (che.getLeix()) {
case 1:
che.zu();
break;
case 2:
ka.zu();
break;
default:
break;
}
sum = sum + che.getMoney();
che.chepai();
System.out.println("需要的价格是:" + che.getMoney());
System.out.print("是否继续租赁:(1.是的 2.不要)");
if (input.nextInt() == 2) {
a = false;
}
} while (a);
System.out.println("总的价格是:" + sum);
}
}
效果如下图: