所以我正在学习java,并且仍然认为自己是初学者,只是为了获得“noob-friendly”的回应,而且我不会被困住,只是想知道某些事情是如何可能的。
这是我的代码:
import java.net.*;
public class HomePage {
String owner;
URL address;
String category;
public HomePage(String inOwner, String inAddress)
throws MalformedURLException {
owner = inOwner;
address = new URL(inAddress);
}
public HomePage(String inOwner, String inAddress, String inCategory)
throws MalformedURLException {
this(inOwner, inAddress);
category = inCategory;
}
}
现在我的问题是:如何使两个对象(HomePage)具有相同的名称,并处理几乎相同的事情(第二个主页中的inCategory除外)?
在本节中,我将学习如何处理错误,因此这个类由我理解的另一个类使用。但我不知道为什么我能够,为什么我这样做,创建两个几乎完全相同的对象。谢谢!
作为参考,这是编译中的另一个类: (由于代码中的声誉和链接,我不得不使用pastebin)
答案 0 :(得分:6)
几乎相同的东西(第二个主页中的inCategory除外)
正如你所说:他们不一样。方法的唯一性由其签名决定,该签名由方法名称及其参数组成。只要参数的类型和/或数量不同,您就可以使用相同的名称。
请注意,您在这里谈论的是构造函数。您正在寻找的术语是overloading
。
如您所见,第二个构造函数使用this(inOwner, inAddress);
。这将使用给定的参数调用第一个构造函数。它确保您不必复制代码以达到相同的效果。多个构造函数的原因是允许外部类创建具有不同参数的对象。
答案 1 :(得分:1)
您没有创建两个对象。具有不同参数的两个构造函数仅用于初始化对象中的字段。对象是类的实例,类中的所有内容都是同一对象的一部分。这是方法重载的一个例子,所以不要在方法和对象之间混淆。
答案 2 :(得分:1)
首先......它们不是对象。 它们是类HomePage的构造函数。 可以有多个方法和多个具有相同名称的构造函数。对具有不同签名的多个方法或构造函数使用相同名称的过程称为OVERLOADING。
在您的情况下,构造函数具有不同的签名
public HomePage(String inOwner, String inAddress) throws MalformedURLException{...}
public HomePage(String inOwner, String inAddress, String inCategory)throws MalformedURLException{..}
仅供参考:请完成Overloading
答案 3 :(得分:0)
您不是要创建两个完全相同的对象。
这两个是构造函数,因此您只需调用一个构造函数来帮助构造实际对象。
public HomePage(String inOwner, String inAddress)
已经有代码来设置属性所有者和地址,以避免代码重复,您可以在public HomePage(String inOwner, String inAddress, String inCategory)
中调用它来设置这两个属性,然后添加行category = inCategory;
初始化类别。
答案 4 :(得分:0)
您正在看到method overloading的示例。
在这种情况下,构造函数被重载以便使用不同的参数集创建HomePage
类型(即使您不知道inCategory
,也可以创建一个实例)