1、继承和抽象应用
/* 假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性: 姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个 奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方 法进行属性访问。 员工类:name id pay 经理类:继承了员工,并有自己特有的bonus。 经理和员工没有继承关系,有一些共同的属性和功能,但功能内容不同 */ abstract class Employee { private String name; private String id; private double pay; Employee(String name,String id,double pay) { this.name=name; this.id=id; this.pay=pay; } public abstract void work(); } class Professional extends Employee { Professional(String name,String id,double pay) { super(name,id,pay); } public void work() { System.out.println("professional work"); } } class Manager extends Employee { private int bonus; Manager(String name,String id,double pay,int bonus) { super(name,id,pay); this.bonus=bonus; } public void work() { System.out.println("namager work"); } }
2、模板方法设计模式
/*模板方法设计模式: 模板方法,在定义功能时,一部分确定,一部分不确定,而确定的部分在使用不确定部分; 将不确定的部分暴露出去,由子类完成,不一定抽象,可以有默认方法; 确定的部分有时可以防止复写。final */ /* 需求:获取一段程序的运行时间。 原理:获取程序开始和结束的时间,相减。 */ abstract class GetTime { public final void getTime() //final避免复写 { long start=System.currentTimeMillis();//获取时间 runCode(); long end=System.currentTimeMillis(); System.out.println("经过的毫秒数:"+(end-start)); } public abstract void runCode();//抽象 } class SubTime extends GetTime { public void runCode()//覆盖 { for(int i=0;i<2000;i++) { System.out.print(i); } } } class GetTimeDemo { public static void main(String[] args) { SubTime gt=new SubTime(); gt.getTime(); } }