如何从超类和子类访问信息?

时间:2013-03-31 15:52:01

标签: java

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

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

但我该怎么做?

我不打算在这里发布所有代码,这将把这篇文章变成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;
    }

我对这段代码做了很多工作,因为我一直试图弄清楚它并不知道从哪里开始。我不认为参数应该为null,我只是将它们包括在内以满足邪恶的编译器。

地址簿:

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

}

5 个答案:

答案 0 :(得分:1)

  

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

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

答案 1 :(得分:1)

使用super function / keyword访问父类。您可以像这样调用父方法

super.methodName();

要访问父构造函数,可以使用super()方法以下列方式执行此操作。

super(null, null, null, null);

答案 2 :(得分:1)

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

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

public class AddressBook {

    public AddressBook(String fname, String lname, String email, String phone) {
        super(null, null, null, null);
    }
}

答案 3 :(得分:0)

  

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

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

将继承视为家谱。超类是你的父母。您的父母无法访问您的任何私人领域,但您从其中继承了相当多的私人领域。

答案 4 :(得分:0)

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

在我看来,你的印象是Contacts的子类是fname,lname等?

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

子类将是一个扩展Contacts的类,如下所示:

public class ContactsSubclass extends Contacts {
...
}