什么是笼统类
笼统类与一般类主要两点不同:
1、在类的修饰符后面多了一个abstract关键字
2、笼统类是不允许经过new来实例化的
因为笼统类不能经过new来实例化,所以根本上是在承继中当做父类运用。
什么是笼统办法
笼统办法的界说需求加上abstract关键字,不能有办法体,以封号结束,比方:
publicabstractvoidgetOtherSalary();
笼统办法的详细完成,需求在子类中完成。注意:static、final的办法,不能被申明为笼统办法。
笼统类与笼统办法
笼统类不一定包括笼统办法,但如果一个类包括了笼统办法,那这个类一定是笼统类,不然编译不经过。
什么时分用笼统办法
笼统办法通常用于父类中。父类通常都是用于界说一些公共办法、公共属性等,但是实际项目可能会出现某些办法界说在父类中,父类却无法给出详细的完成,此刻就是笼统办法出场的时分了。比方下文实例中,员工在公司中的收入都包括根本薪酬以及绩效奖金,根本薪酬大家都相同,但是绩效奖金就因岗位而异了,所以绩效奖金在员工类中仅仅个办法体,没有详细完成。
笼统办法与规划形式
笼统办法在规划形式中有比较多的体现,特别是用于模板办法规划形式,详见下文实例
实例
1.笼统办法的运用
需求描述:公司里的员工分为一般程序员和技能总监,一切员工的根本薪水都是10000元每个月,程序员的绩效奖金每个月3000元,技能总监的绩效奖金每个月20000元。
了解了需求后,我们先界说一个员工类Employee,如下:
/**
*界说员工类,每个员工的薪水都由根本薪资跟绩效奖金组成
*/publicabstractclassEmployee{/**
*岗位称号
*/privateStringjobName;/**
*一切员工的每月根本薪资都相同
*@return*/publicintgetBaseSalary(){return10000;
}/**
*一切员工都有绩效奖金,但是一般程序员跟技能总监的不相同,
*所以这儿无法给出详细完成,需求在子类中完成
*@return*/publicabstractintgetOtherSalary();publicStringgetJobName(){returnjobName;
}publicvoidsetJobName(StringjobName){this.jobName=jobName;
}
}
界说程序员类Coder,承继员工类,完成getOtherSalary()办法,如下:
/**
*程序员类,承继Employee类
*/publicclassCoderextendsEmployee{/**
*因为承继了Employee类,所以有必要完成Employee类中的笼统办法getOtherSalary()
*@return*/@OverridepublicintgetOtherSalary(){return3000;
}
}
界说技能总监类Cto,承继员工类,完成getOtherSalary()办法,如下:
/**
*技能总监类,承继Employee类
*/publicclassCtoextendsEmployee{/**
*因为承继了Employee类,所以有必要完成Employee类中的笼统办法getOtherSalary()
*@return*/@OverridepublicintgetOtherSalary(){return20000;
}
}
最终打印程序员与技能总监每个月的薪水:
publicclassAbstractMain{publicstaticvoidmain(String[]args){
Codercoder=newCoder();
coder.setJobName(“程序员”);
System.out.println(coder.getJobName()+”每个月薪资为:”);
System.out.println(“根本薪资:”+coder.getBaseSalary()+”元”);
System.out.println(“绩效奖金:”+coder.getOtherSalary()+”元”);
Ctocto=newCto();
cto.setJobName(“技能总监”);
System.out.println(cto.getJobName()+”每个月薪资为:”);
System.out.println(“根本薪资:”+cto.getBaseSalary()+”元”);
System.out.println(“绩效奖金:”+cto.getOtherSalary()+”元”);
}
}
履行以上程序后,输出:
程序员每个月薪资为:
根本薪资:10000元
绩效奖金:3000元
技能总监每个月薪资为:
根本薪资:10000元
绩效奖金:20000元
2.笼统办法与模板办法规划形式
在完成了以上需求后,此刻又提出新需求,依照以下格局打印每个月的薪酬条,而且打印的次序有必要按以下格局打印出来:
XXX每个月薪资为:
根本薪资:XXX元
绩效奖金:XXX元
该月总薪酬为:XXX元
依照第一个比如的完成方式无法满意这个需求,第一个比如的打印次序是由调用者决定的,无法统一操控。此刻就是模板办法规划形式上台的时分了。基于第一个比如,改造一下员工类Employee,增加打印薪酬条的办法publicfinalvoidprintSalary()如下:
/**
*界说员工类,每个员工的薪水都由根本薪资跟绩效奖金组成
*/publicabstractclassEmployee{/**
*岗位称号
*/privateStringjobName;/**
*一切员工的每月根本薪资都相同
*@return*/publicintgetBaseSalary(){return10000;
}/**
*一切员工都有绩效奖金,但是一般程序员跟技能总监的不相同,
*所以这儿无法给出详细完成,需求在子类中完成
*@return*/publicabstractintgetOtherSalary();/**
*获取每个月薪酬总额
*@return*/publicintgetTotalSalary(){returnthis.getBaseSalary()+this.getOtherSalary();
}/**
*界说履行次序模板,模板中有些办法(笼统办法)是要在子类中完成
*打印薪酬条,界说为final类,制止被子类重写
*/publicfinalvoidprintSalary(){
System.out.println(this.jobName+”每个月薪资为:”);
System.out.println(“根本薪资:”+this.getBaseSalary()+”元”);
System.out.println(“绩效奖金:”+this.getOtherSalary()+”元”);
System.out.println(“该月总薪酬为:”+getTotalSalary()+”元”);
}publicStringgetJobName(){returnjobName;
}publicvoidsetJobName(StringjobName){this.jobName=jobName;
}
}
打印每个月薪酬条:
publicclassAbstractMain{publicstaticvoidmain(String[]args){
Codercoder=newCoder();
coder.setJobName(“程序员”);
coder.printSalary();
Ctocto=newCto();
cto.setJobName(“技能总监”);
cto.printSalary();
}
}
广州天河区珠江新城富力盈力大厦北塔2706
020-38013166(网站咨询专线)
400-001-5281 (售后服务热线)
品牌服务专线:400-001-5281
长沙市天心区芙蓉中路三段398号新时空大厦5楼
联系电话/ (+86 0731)88282200
品牌服务专线/ 400-966-8830
旗下运营网站:
Copyright © 2016 2024澳门原料网1688白老虎,保留所有权利。 粤ICP备09033321号