2014-02-10 103 views
0

我是OOP和一般編程的新手。我在如何將東西放在父類中並從其他類和main中調用它們時遇到了問題。在父類中插入數組列表以覆蓋子類

我在main中有以下arraylist創建者,但覺得是真正的OOP,這些應該在父類和子類中,並從main調用。這是否正確,有人可以幫助我解決這個問題。

如何獲取父類中的數組列表,然後從main中正確調用它?

這是我的主:

package ooo1; 

import java.util.ArrayList; 
import java.util.Scanner; 

public class ContactList { 

    public static void main(String[] args) { 

     Scanner input1 = new Scanner(System.in); 
     int type = 0; 
     while(type != 5){ 
     System.out.println("Please select an option:"); 
     System.out.println("Personal Contact: Enter 1"); 
     System.out.println("Business Contact: Enter 2"); 
     System.out.println("Display Personal Contacts: Enter 3"); 
     System.out.println("Display Business Contacts: Enter 4"); 
     System.out.println("5 to quit"); 

     type = input1.nextInt(); 

     if(type == 5){ 
      System.out.println("Goodbye"); 
      break; 
     } 

     ArrayList<Contact> contacts = new ArrayList<Contact>(); 
     Scanner input = new Scanner(System.in); 
     System.out.println("Please enter ContactId : "); 
     String contactId = input.nextLine(); 
     System.out.println("Please enter First Name : "); 
     String firstName = input.nextLine(); 
     System.out.println("Please enter Last Name : "); 
     String lastName = input.nextLine(); 
     System.out.println("Please enter Address : "); 
     String address = input.nextLine(); 
     System.out.println("Please enter Phone Number : "); 
     String phoneNumber = input.nextLine(); 
     System.out.println("Please enter Email Address : "); 
     String emailAddress = input.nextLine(); 

     if(type == 1){ 
      System.out.println("Please enter Birthday: "); 
      String dateofBirth = input.nextLine(); 
      Contact pcontact = new PersonalContact(contactId, firstName, lastName, address, phoneNumber, emailAddress, dateofBirth); 
      contacts.add(pcontact); 
     } 

     else if(type == 2){ 
      System.out.println("Please enter Job Title: "); 
      String jobTitle = input.nextLine(); 
      System.out.println("Please enter Organization: "); 
      String organization = input.nextLine(); 
      Contact bcontact = new BusinessContact(contactId, firstName, lastName, address, phoneNumber, emailAddress, jobTitle, organization); 
      contacts.add(bcontact); 
     } 

     } 
     } 


     } 

這就是我對父類:

package ooo1; 

import java.util.ArrayList; 
import java.util.Scanner; 

public abstract class Contact { 

    String contactId; 
    String firstName; 
    String lastName; 
    String address; 
    String phoneNumber; 
    String emailAddress; 

    public Contact(String contactId,String firstName,String lastName, String address, String phoneNumber, String emailAddress) 
    { 
     this.contactId = contactId; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.address = address; 
     this.phoneNumber = phoneNumber; 
     this.emailAddress = emailAddress; 
    } 
    public void setContactId(String input){ 
     this.contactId = input; 
    } 
    public String getContactId(){ 
     return contactId; 
    } 

    public void setFirstName(String input){ 
     this.firstName = input; 
    } 
    public String getFirstName(){ 
     return firstName; 
    } 

    public void setLastName(String input){ 
     this.lastName = input; 
    } 
    public String getLastName(){ 
     return lastName; 
    } 

    public void setAddress(String input){ 
     this.address = input; 
    } 
    public String getAddress(){ 
     return address; 
    } 

    public void setPhoneNumber(String input){ 
     this.phoneNumber = input; 
    } 
    public String getPhoneNumber(){ 
     return phoneNumber; 
    } 

    public void setEmailAddress(String input){ 
     this.emailAddress = input; 
    } 
    public String getEmailAddress(){ 
     return emailAddress;   
    } 

    void displayContacts(){ 
     System.out.println("Contact ID:" + contactId + " First Name:" + firstName + " Last Name:" + lastName); 
     System.out.println("Address:" + address); 
     System.out.println("Phone Number:" + phoneNumber); 
     System.out.println("Email Address:" + emailAddress); 
    } 

} 

我的一個子類:其它相同,只是增加了幾個變量: 顯示聯繫人():無法確定如何處理它。

/* *要更改此許可證標題,請在項目屬性中選擇許可證標題。 *要更改此模板文件,請選擇工具|模板 *並在編輯器中打開模板。 */

package ooo1;

公共類PersonalContact擴展聯繫{

private String dateofBirth; 

public PersonalContact(String contactId, String firstName, String lastName, String address, String phoneNumber, String emailAddress, String dateofBirth){ 

    super(contactId, firstName, lastName, address, phoneNumber, emailAddress); 

    this.dateofBirth = dateofBirth; 
} 
public void setDateofBirth(String input){ 
    this.dateofBirth=input; 
} 
public String getDateofBirth(){ 
    return this.dateofBirth; 
} 
@Override 
public void displayContacts(){ 
    System.out.print("Personal Contacts: "); 
    System.out.println("Contact ID:" + contactId + " First Name:" + firstName + " Last Name:" + lastName); 
    System.out.println("Address:" + address); 
    System.out.println("Phone Number:" + phoneNumber); 
    System.out.println("Email Address:" + emailAddress); 
    System.out.println("Birthday:" + dateofBirth); 
} 

}

+1

我認爲這是正確的,聯繫人只代表1個聯繫人。如果你想分開列表,那麼你可以看看創建一個包含一組聯繫人的AddressBook類。 –

+0

如果我以這種方式對我如何打印聯繫人列表感到困惑。我需要他們分開個人和商業,並需要能夠通過contactID呼叫某個聯繫人。如果我能夠獲得打印功能,我會稱這爲第一次嘗試。如果創建了一個地址簿類,那將如何工作。 – user3196742

回答

1

您可能希望這樣的事情。

public class AddressBook<T extends Contact> 
{ 

    private List<T> contacts = new ArrayList<T>(); 

    public void addContact(T contact) 
    { 
    contacts.add(contact); 
    } 

} 

你可以像這樣實例化和使用這個類。

AddressBook<Contact> book = new AddressBook<Contact>(); 
book.add(new PersonalContact(...)); 
book.add(new BusinessContact(...)); 

隨着時間的推移,您可以靈活地將方法添加到與底層集合一起使用的AddressBook中。例如,您可能想要搜索具有特定名稱的聯繫人。或者返回由特定屬性排序的聯繫人迭代器。

+0

我相信這是一個愚蠢的問題:我看到我需要這樣做,但似乎無法得到它。什麼是也指。對不起,我越來越困惑。 – user3196742

+0

T是泛型類型。您可以實例化類型爲Contact的AddressBook,或者您可以更具體地說這個地址簿只能保存個人聯繫人。 –

0

您可以在課堂上跟添加一個方法:

public void getData(){ 
// take in all the inputs here, so that you can directly store them in class member variables instead of passing them from main. 
} 

假設PersonalContact & BusinessContact被繼承聯繫的類。 您可以在其中添加一個方法:

class PersonalContact extends Contact{ 
String dateofBirth; 
public void getData(){ 
super.getData(); //calls getData() method from base class 
// take DOB as input & store it 
} 

同樣,對於BusinessContact類。

我建議你看看抽象類&接口供將來使用。

+1

getData是該方法的錯誤名稱,因爲它不是getter。 – Taylor

+0

該方法確實從用戶獲取數據。我寫了評論。 – Sumedh

+0

所以你想讓你的模型類綁定到UI並提示用戶輸入?我希望我誤解了。 –

0

Contact類似乎沒問題。但是ContactList沒有那麼多。它應該是聯繫人的數據結構,所以沒有主要方法的原因。

public class ContactList { 

    private ArrayList<Contact> contacts;  

    public ContactList(){ 
      this.contacts = new ArrayList<Contact>(); 
    } 

    public void addContact(Contact contact){ 
      this.contacts.add(contact); 
    } 

    public Contact getContact(int index){ 
      return contacts.get(index); 
    } 

    // other methods that work with the data structure 
    // f.e. searching, deleting, ... 

} 

,然後你可以有一些ContactUtil類,會照顧的,從用戶讀取聯繫人信息(你在你的主要方法有什麼)。

public final class ContactUtil { 

    private ContactUtil(){} // we don't want to create instances of this class 

    public static Contact readNewContact(){ 

     Scanner input1 = new Scanner(System.in); 
     int type = 0; 
     ... 


     return contact; 
    } 

} 

最後,你將有一些類只爲main()

public class Main { 

     public static void main(String[] args){ 

      ContactList myContacs = new ContactList(); 
      myContacts.add(ContactUtil.readNewContact()); 

      Contact contact = ContactUtil.readNewContact(); 
      myContacts.add(contact); 

     } 

}