0

So I am learning java, and would still consider myself a beginner, only to get "noob-friendly" responses, and I am not stuck but just wondering how something is possible.

Here is my code:

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;
}
}

Now my question is this: How is it possible to make two objects (HomePage) with the same name, and handling almost identical things (with the exception of inCategory in the second HomePage)?

In this section I am learning how to handle errors, so this class is used by another class which I understand. But I am not sure why I am able, and why I do, create two objects that are almost identical. Thanks!

For reference, here is the other class in the compilation: (due to reputation and links in the code, I had to pastebin)

4

5 回答 5

6

几乎相同的东西(第二个主页中的 inCategory 除外)

正如你所说:它们不一样。方法的唯一性由其签名确定,该签名由方法名称及其参数组成。只要参数的类型和/或数量不同,您就可以使用相同的名称。

请注意,您在这里谈论的是构造函数。您要查找的术语是overloading.

如您所见,第二个构造函数使用this(inOwner, inAddress);. 这将使用给定的参数调用第一个构造函数。它确保您不必复制代码即可达到相同的效果。多个构造函数的原因是允许外部类创建具有不同参数的对象。

于 2013-07-18T19:59:02.657 回答
1

您没有创建两个对象。这两个不同参数的构造函数只是用来初始化对象中的字段。对象是类的实例,类中的所有内容都是同一对象的一部分。这是一个方法重载的例子,所以不要混淆方法和对象。

于 2013-07-18T20:25:44.853 回答
1

首先..它们不是对象。它们是类 HomePage 的构造函数。可以有多个方法和多个同名的构造函数。这种为具有不同签名的多个方法或构造函数使用相同名称的过程称为重载。

在您的情况下,构造函数具有不同的签名

    public HomePage(String inOwner, String inAddress) throws MalformedURLException{...}
    public HomePage(String inOwner, String inAddress, String inCategory)throws MalformedURLException{..}

仅供参考:请通过重载

于 2013-07-18T20:37:30.790 回答
0

您没有创建两个相同的对象。

这两个是构造函数,因此您可以简单地调用一个构造函数来帮助构造实际对象。

public HomePage(String inOwner, String inAddress)已经有设置属性所有者和地址的代码,因此为了避免代码重复,您可以调用它public HomePage(String inOwner, String inAddress, String inCategory)来设置这两个属性,然后添加行category = inCategory;来初始化类别。

于 2013-07-18T20:00:05.137 回答
0

您正在看到一个方法重载的示例。

在这种情况下,构造函数被重载,以便HomePage使用不同的参数集创建一种类型(即使您不知道也可以创建一个实例inCategory)。

于 2013-07-18T20:01:56.670 回答