Getter / Setter来自Java中的单独类文件

时间:2010-04-25 05:32:46

标签: java

我是Java新手,对于HW分配,我们必须创建一个Person类,它具有构造函数,getter / setter,用于firstName,lastName,phone的属性。这是与旧HW分配(Person.java)的单独文件。现在我们必须在新的HW分配(LoanApplication.java)中使用Person类。因此,如果其中一个属性是

private Person client

我是否需要再次创建getter / setter或构造函数?否则,每个LoanApplicaiton实例如何知道它与哪个Person属性一起使用?

即使我的LoanApplicaiton.class没有扩展Person.class,JVM如何知道它可以使用Person.class?感谢。

2 个答案:

答案 0 :(得分:1)

不,你不需要重新实现Person。只需将已编译的“* .class”文件添加到类路径中,并添加相应的import语句以使用Person类的实例。事实上,这是面向对象编程的好处之一;旧对象可以在新项目中重复使用(假设它们设计得很好并且“做好一件事”并且没有与特定于应用程序的逻辑相结合)。

我不知道你的意思是“每个LoanApplicaiton实例如何知道它与哪个Person属性一起使用”,但假设你的getter / setter是公共的,那么你可以从你的LoanApplication类中调用这些函数。例如,如果Person有一个名为“setName()”的函数,你的贷款应用程序中的人员实例名为“p”,名称为“n”,那么你可以调用“p.setName(n)”来设置p的名字是n。

Java虚拟机(JVM)有一个名为“类路径”的概念,它决定了它在哪里查找“* .jar”和“* .class”文件,其中包含各种类的定义。这些类以JVM能够读取和获取其定义的格式保存。至于不扩展它......对象可以通过几种不同的方式在面向对象的编程语言中进行交互;继承(一个对象扩展另一个),多态(多个不同的类为同一个接口提供不同的实现......这是继承的特定应用),组合(一个类由其他类的实例组成),委托(一个类委托)它的工作是一个或多个其他类的实例,这是组合的一个特例),以及许多其他OOP设计模式。在这种情况下,您需要合成。

答案 1 :(得分:0)

不,假设你在class Person中正确地写了Person.java,你可以在class LoanApplication LoanApplication.java中使用它。此时,Person.java不需要修改,但是 do 必须确保Java编译器在编译LoanApplication.java时可以找到它。

这意味着您可能需要添加一些import语句,或者更简单地说,您可能只需将Person.java复制到与LoanApplication.java相同的作业目录。

您不必使用extends现有类来使用它。更好的方法是撰写而不是继承(参见: Effective Java 2nd Edition :第16项:赞成组合而不是继承)。例如,Person.java可能使用String firstName等。这意味着class Person使用String(除其他外)组成,但它不会继承{{1}无论如何都是String


  

即使我的final class未延伸Person.class,JVM如何知道它可以使用LoanApplication.class

这与继承无关。即使Person.class(顺便说一下,这是 HORRIBLE 的想法),JVM仍然需要能够找到class LoanApplication extends Person来加载Person.class(如何JVM找到LoanApplication.class个文件,这完全是另一个问题!)

老实说,我认为此时担心这样的细节并不会有所帮助。如果您对编程很认真,我建议您使用Eclipse之类的IDE;它会为您处理文件管理,链接,编译等,因此您可以专注于真正的任务,即编程