Java 笼统类 笼统办法 使用说明

IT技术2年前 (2022)发布 投稿用户
0

什么是笼统类

笼统类与一般类主要两点不同:
1、在类的修饰符后面多了一个abstract关键字
2、笼统类是不允许经过new来实例化的
因为笼统类不能经过new来实例化,所以根本上是在承继中当做父类运用。
什么是笼统办法
笼统办法的界说需求加上abstract关键字,不能有办法体,以封号结束,比方:
publicabstractvoidgetOtherSalary();
笼统办法的详细完成,需求在子类中完成。注意:static、final的办法,不能被申明为笼统办法。
笼统类与笼统办法
笼统类不一定包括笼统办法,但如果一个类包括了笼统办法,那这个类一定是笼统类,不然编译不经过。
什么时分用笼统办法
笼统办法通常用于父类中。父类通常都是用于界说一些公共办法、公共属性等,但是实际项目可能会出现某些办法界说在父类中,父类却无法给出详细的完成,此刻就是笼统办法出场的时分了。比方下文实例中,员工在公司中的收入都包括根本薪酬以及绩效奖金,根本薪酬大家都相同,但是绩效奖金就因岗位而异了,所以绩效奖金在员工类中仅仅个办法体,没有详细完成。
笼统办法与规划形式
笼统办法在规划形式中有比较多的体现,特别是用于模板办法规划形式,详见下文实例

Java


实例
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();
}
}

© 版权声明
好牛新坐标 广告
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章