视频: Spark视频王家林第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏 2024
的人当你用Java编写一个面向对象的程序时,你首先考虑数据。你正在写账户。那么,账户是什么?您正在编写处理按钮点击的代码。那么按钮是什么?您正在编写一个计划,将薪资支票发送给员工。什么是员工?
在这个例子中,员工是有名字和职位的人。当然,员工还有其他的特点,但是现在坚持基础。这个清单中的代码定义了员工的意义。
<! --1 - >import static java。郎。系统。出;公共类员工{私人字符串名称;私人字符串jobTitle; public void setName(String nameIn){name = nameIn;} public String getName(){return name;} public void setJobTitle(String jobTitleIn){jobTitle = jobTitleIn;} public String getJobTitle(){return jobTitle;} public void cutCheck double amountPaid){out。 printf(“支付给%s的订单”,名称);出。 printf(“(%s)*** $”,jobTitle);出。 printf(“%,。2fn”,amountPaid);}}
在清单中,定义了一个Employee类。你可以使用你在这里定义的内容,并扩展定义来创建新的,更专业化的类。因此,在下一个列表中,您将定义一个新类 - FullTimeEmployee类。
<! - 2 - >public class FullTimeEmployee extends Employee {private double weeklySalary;私人双重收益; public void setWeeklySalary(double weeklySalaryIn){weeklySalary = weeklySalaryIn;} public double getWeeklySalary(){returns weeklySalary;} public void setBenefitDeduction(double benefitDedIn){benefitDeduction = benefitDedIn;} public double getBenefitDeduction(){return benefitDeduction;} public double findPaymentAmount( ){return weeklySalary - benefitDeduction;}}
查看清单,可以看到FullTimeEmployee类的每个实例都有两个字段:weeklySalary和benefitDeduction。但那些是每个FullTimeEmployee实例唯一的字段吗?不,他们不是。
第一行表示FullTimeEmployee类扩展了现有的Employee类。这意味着除了具有每周的薪资和福利待遇外,每个FullTimeEmployee实例还有两个其他字段:name和jobTitle。这两个字段来自Employee类的定义,您可以在第一个列表中找到它。
在第二个列表中,魔术字是 。当一个类扩展现有类时,扩展类将自动继承现有类中定义的功能。因此,FullTimeEmployee类 继承 名称和jobTitle字段。 FullTimeEmployee类还继承了Employee类中声明的所有方法 - setName,getName,setJobTitle,getJobTitle和cutCheck。 FullTimeEmployee类是Employee类的
子类 。 这意味着Employee类是FullTimeEmployee类的
超类 。你也可以用血亲来谈谈。 FullTimeEmployee类是Employee类的 子 ,Employee类是FullTimeEmployee类的 父 。 几乎(但不完全),就好像FullTimeEmployee类是由此列表中的代码定义的。这个代码是假的,但内容丰富。
import static java。郎。系统。出;公共类FullTimeEmployee {私人字符串名称;私人字符串jobTitle;私人双周刊沙利文;私人双重收益; public void setName(String nameIn){name = nameIn;} public String getName(){return name;} public void setJobTitle(String jobTitleIn){jobTitle = jobTitleIn;} public String getJobTitle(){return jobTitle;} public void setWeeklySalary public double getWeeklySalary(){return weeklySalary;} public void setBenefitDeduction(double DEDIn){benefitDeduction = benefitDedIn;} public double getBenefitDeduction(){return benefitDeduction;} public double findPaymentAmount(){return weeklySalary - benefitDeduction;} public void cutCheck(double amountPaid){out。 printf(“支付给%s的订单”,名称);出。 printf(“(%s)*** $”,jobTitle);出。 printf(“%,。2fn”,amountPaid);}}
为什么这个列表是伪代码?那么,这个列表和前面列表中的继承情况之间的主要区别是:子类不能直接引用其父类的私有字段。要对父类的私有字段执行任何操作,子类必须调用父类的访问器方法。
回到第二个列表中,调用setName(“Rufus”)将是合法的,但代码名称=“Rufus”不会。如果您相信上一次列出的所有内容,那么您可以认为FullTimeEmployee类中的代码可以使用name =“Rufus”。那么,它不能。
你不需要员工。你的硬盘上的Java文件编写扩展Employee类的代码。所有你需要的是文件员工。类。