我是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?感谢。
答案 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;它会为您处理文件管理,链接,编译等,因此您可以专注于真正的任务,即编程。