java - 使用构造函数创建超类和子类 - Java
问题描述
我是 Java 新手。我有一个问题要解决,但我不太明白构造函数是如何工作的。我了解如何创建超类和子类,但我不了解它们中的构造函数(或者它们实际上是如何工作的——我对构造函数进行了大量的研究,但这并没有多大意义)。
我正在尝试编写一个程序来创建一个名为Employees 的超类。这个Employee类有实例变量employeeId(一个整数)和employeeName(一个String)。
子类称为Manager。Manager 子类有一个名为employeeTitle 的实例变量(它是一个字符串)。它还有一个名为 managerDetails() 的方法。ManagerDetails() 应该显示employeeId、employeeName 和employeeTitle。
这是我到目前为止所拥有的:
package tryingoutjava;
public class TryingOutJava {
class Employee {
int employeeId;
String employeeName;
void Employee() {
}
}
class Manager extends Employee {
String employeeTitle;
void managerDetails() {
}
}
public static void main(String[] args) {
}
}
我很困惑如何为超类和子类设置构造函数,甚至构造函数的真正样子。我在整个互联网上都看到了示例,但没有人真正强调构造函数的实际部分,或者所有内容如何在视觉上链接,这有助于我学习。
我想我在理解如何设置调用对象的方法方面也遇到了问题。如果有人有时间提供帮助,将不胜感激。谢谢!
解决方案
我猜你想要这样的东西。请注意,在这种情况下,最好将每个文件一个类分开,因为它们在这里是单独的实体。限制对实体字段的数据访问是一个好主意,例如使用封装。
员工.java:
package tryingoutjava;
public class Employee {
// Protected access because we want it in Manager
protected int employeeId;
protected String employeeName;
public Employee(int employeeId, String employeeName) {
this.employeeId = employeeId;
this.employeeName = employeeName;
}
}
管理器.java:
package tryingoutjava;
public class Manager extends Employee {
private String employeeTitle;
public Manager(String employeeTitle, int employeeId, String employeeName) {
// Use super to invoke Employee constructor
super(employeeId, employeeName);
this.employeeTitle = employeeTitle;
}
// Just create a simple string describing manager
@Override
public String toString() {
return "Manager{" +
"employeeTitle='" + employeeTitle +
"employeeId=" + employeeId +
", employeeName='" + employeeName + '\'' +
'}';
}
}
应用程序.java:
package tryingoutjava;
public class Application {
// Example of construction plus printing of Manager data
public static void main(String[] args) {
Employee davie = new Employee(1, "Dave The Cable Guy");
Manager tom = new Manager("CFO", 2, "Tomas");
System.out.println(tom.toString());
}
}
构造函数(通常情况下)只是通过super
调用来委派父级的构造。虽然还有其他技术,例如 Builder 模式,但这是最基本和最容易理解的方法。还有其他几种方法可以做到这一点,但这应该可以帮助您入门,希望对您有所帮助!
推荐阅读
- mysql - 如何在 mySql JSON 查询中转义句点
- selenium - webdriver-manager 无法启动 - 错误:spawn cmd ENOENT
- continuous-integration - GitHub azure/webapps-deploy@v2 - 使用 ZIP 部署的包部署失败
- android - 如何检查 Flutter 中的 Future 变量是否发生了变化?
- java - Android工作室评论发布页面不起作用
- python - Odoo:更新one2many字段上的记录时触发on_change?
- python - ZeroMQ XPUB recv() 是查找是否有订阅者并解决慢加入者综合症的解决方案吗?
- docker - Appium 机器人框架的 Dockerfile
- javascript - 如何突出显示活动导航栏段落
- javascript - 每 3 秒自动刷新表体