0

我想做的是从超类及其子类访问信息(变量、方法等)。

如果我对继承的了解是正确的,那么通过访问超类,我们默认可以访问它的子类。所以我认为我只需要能够访问父(超级)类。

但是我该怎么做呢?

我不会在这里发布所有代码,这会将这篇文章变成 3 页。

超类只是创建联系人的通用代码,需要访问超类的类是创建arraylist并将每个联系人记录在arraylist中的类。

我并不是想为我编写代码,但是对于理解它如何工作的所有帮助,将不胜感激。

为了简短起见,除非需要,否则我不会发布子类。

联系人(超类):

public class Contacts
{
    protected String fname;
    protected String lname;
    protected String email;
    protected String phone;

    public Contacts(String fname, String lname, String email, String phone)
    {
        this.fname=fname;
        this.lname=lname;
        this.email=email;
        this.phone=phone;

    }

    public String getfname()
    {
        return fname;
    }

    public void setfname(String first)
    {
        this.fname=first;       
    }

    public String getlname()
    {
        return lname;
    }

    public void setlname(String last)
    {
        this.lname=last;
    }

    public String getemail()
    {
        return email;
    }

    public void setemail(String e)
    {
        this.email=e;
    }

    public String getphone()
    {
        return phone;
    }

    public void setphone(String num)
    {
        this.phone=num;
    }

    public String getFullName()
    {
        String full=fname+" "+lname;
        return full;
    }

我没有在这段代码上做太多,因为我一直在试图弄清楚它,却不知道从哪里开始。我不认为参数应该是空的,我只是包括那些满足邪恶的编译器。

地址簿:

import java.util.ArrayList;
public class AddressBook
{
    Contacts enteredContact = new Contacts(null, null, null, null);
}

这是了解包含的内容的子类之一。

朋友(子类):

public class Friend extends Contacts
{
    private String dob;

    /**
     * Constructs a new Friend object. (Insert any further description that is needed)
     * @param fname
     * @param lname
     * @param email
     * @param phone
     */
    public Friend(String fname, String lname, String email, String phone)
    {
        super(fname, lname, email, phone);
    }

    /**
     * @return the dob
     */
    public String getDob()
    {
        return dob;
    }

    /**
     * @param dob the dob to set
     */
    public void setDob(String dob)
    {
        this.dob = dob;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString()
    {
        return fname+", "+lname+", "+email+", "+phone+", "+dob;
    }

}
4

5 回答 5

1

如果我对继承的了解是正确的,那么通过访问超类,您可以默认访问它的子类。所以我想我只需要能够访问父(超)类。

不,通过访问超类,您只能访问那些被子类覆盖的子类方法。子类为自己创建的方法,即使是公共的,也不能被超类的对象访问。

于 2013-03-31T15:54:37.660 回答
1

使用super函数/关键字访问父类。您可以像这样调用父方法

super.methodName();

要访问父构造函数,可以使用super()方法通过以下方式进行。

super(null, null, null, null);
于 2013-03-31T15:55:14.797 回答
1

如果一个类扩展了一个超类,它会继承它的所有成员。非private它可以直接访问的。

仅供参考,您可以使用super()构造函数来初始化字段。

public class AddressBook {

    public AddressBook(String fname, String lname, String email, String phone) {
        super(null, null, null, null);
    }
}
于 2013-03-31T15:56:51.263 回答
0

如果我对继承的了解是正确的,那么通过访问超类,您可以默认访问它的子类。

不,这是倒退。通过访问子类,您可以访问超类的字段,仅限于字段的可见性和终结性。您可以根据super()需要使用它们来访问它们。

把继承想象成一棵家谱。超类是你的父母。你的父母不能访问你的任何私人领域,但你已经从你那里继承了很多。

于 2013-03-31T15:57:38.947 回答
0

我看到了对什么是超类和子类的基本误解。

在我看来,您的印象是联系人的子类是 fname、lname 等?

这些被称为成员,或者在这种情况下更恰当地称为:实例成员。

子类将是扩展联系人的类,如下所示:

public class ContactsSubclass extends Contacts {
...
}
于 2013-03-31T15:58:43.843 回答