Java 抽象类怎么用
去公司实习第一天,带教就扔给我一段代码让改,里面有三个类都写了一模一样的“计算员工工资”的方法,全是复制粘贴的,改其中一个的公式,另外两个还得手动改,差点漏了。带教说,这就是没用到Java里的抽象类,用了之后能省好多事儿,还能少出错。
什么是抽象类?不是“空类”哦
很多人刚学Java,会觉得抽象类就是啥内容都没有的空类,其实完全不是。咱们换个生活化的例子:你家小区楼下的“便民服务点”,它本身不是卖菜的、不是修鞋的,也不是修家电的,但它要求来这里摆摊的人,必须先有“合法经营资质”,不然不让摆。这个“便民服务点”就相当于抽象类,它只定规矩,不做具体的事儿;而来摆摊的菜摊、修鞋摊,就是继承它的普通类,得按照它定的规矩来干活。

抽象类和普通类最大的区别,就是它可以有“没写完的方法”——比如刚才说的便民服务点,它可以写一个“请提供资质证明”的要求,但不写具体怎么审核,具体怎么审得每个摊主自己来。这种没写完的方法,就叫“抽象方法”,而包含抽象方法的类,必须声明成抽象类。
抽象类的核心用法:定规矩,省重复
咱们回到员工工资的例子,刚才三个类都是“正式员工”“兼职员工”“实习生”,它们的“计算工资”逻辑不一样,但都得有“计算工资”这个功能,之前复制粘贴的方法就是重复写了同样的功能逻辑,浪费时间还容易错。
用抽象类改的话,先建一个叫Employee的抽象类,在里面声明一个抽象方法calculateSalary(),就相当于定了“所有员工都要会算工资”的规矩。然后把三个具体的员工类,比如FullTimeEmployee(正式员工)、PartTimeEmployee(兼职员工)、Intern(实习生),都继承这个Employee抽象类,同时分别实现自己的calculateSalary()方法:正式员工是底薪加提成,兼职是按小时算,实习生是固定补贴,这样就不用重复写方法了。
再举个生活化的例子:公司开大会,定了“所有部门都要在月底交工作总结”,这就相当于抽象类里的抽象方法;行政部交的是办公耗材统计,销售部交的是业绩报表,技术部交的是项目进度,这就是各个子类实现抽象方法的具体内容。这样一来,大家都按规矩来,不会有人漏交,也不用每个部门都去说一遍“要交总结”。
用抽象类的注意事项,别踩坑
不是所有场景都适合用抽象类,有两个坑得避开:
第一个,抽象类不能直接new出对象。刚才说的便民服务点,你不能直接说“我就是便民服务点,给我来一斤菜”,它本身是个规矩,不是具体的摊,所以new Employee()这样的代码会报错,只能用具体的子类去new。
第二个,子类必须实现抽象类里的所有抽象方法,不然这个子类也得声明成抽象类。比如刚才的FullTimeEmployee,如果只继承了Employee却没写calculateSalary(),那它就不是一个完整的正式员工类,得再写成抽象类,留着以后再完善,不然调用的时候会出问题。
其实Java里的抽象类,就像咱们生活里的“模板”,把大家都需要的共性规矩定下来,把需要各自发挥的具体细节留给子类,既减少了重复劳动,又保证了代码的规范性,是新手入门必须掌握的实用工具。