首页 > 解决方案 > 使用构造函数创建超类和子类 - 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

解决方案


我猜你想要这样的东西。请注意,在这种情况下,最好将每个文件一个类分开,因为它们在这里是单独的实体。限制对实体字段的数据访问是一个好主意,例如使用封装。

员工.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 模式,但这是最基本和最容易理解的方法。还有其他几种方法可以做到这一点,但这应该可以帮助您入门,希望对您有所帮助!


推荐阅读