2013-10-22 200 views
0

我正在做一些java代碼,與朋友一起玩,這成了我們書中向我們拋出的一個問題。繼承和重載的構造函數

  • 建立具有名稱,年齡的對象人。簡單。
  • 用對象行業擴展對象人,其中有工作名稱和工資。
  • 使用兩個overloaders,一個給予所有信息人和專業 需要。操作簡單,用戶超(等等)
  • 二overloader被賦予了人的對象和信息,使職業

代碼如下幾行內容:

Person對象

public class Person 
{ 

private String name; 
private int age; 

public Person(String n, int a) 
{ 
    name=n; 
    age=a; 
} 

} 

職業目標

public class Profession extends Person 
{ 

private String jobName; 
private int salary; 

public Profession(String n, int a, String j, int s) 
{ 
    super(n,a); 
    jobName=j; 
    salary=s; 
} 

public Profession(Person p, String j, int s) 
{ 
    //this is where my problem is 
} 

} 

我不知道是什麼與人物相關。有任何想法嗎?我會很感激幫助!這不是一個等級,只是一些朋友,我在課堂上獲得樂趣。

+1

作出變量的getter然後使用'超(p.getN(),p.getA());' – Craig

+0

否則執行' Person(Person p)'構造函數 – iluxa

+0

我喜歡Person(Person p)的想法,但我會怎麼做呢? 至於獲得變量,這絕對有效!我忘了我們已經被教過了。 – formn

回答

3

我覺得這裏更重要的問題是,繼承應該建模是,一個關係。在這種情況下Profession不是 a Person,所以我看不到任何理由爲什麼Profession將從Person繼承。

ProfessionPerson之間的更合理的關係是有-一個,人們 preofessions。那麼一個更爲現實的階級結構是:

class Person { 
    private String  name; 
    private int  age; 
    private Profession profession; 

    public Person(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    public setProfession(Profession p) { 
     this.profession = p; 
    } 
} 

class Profession { 
    private String job; 
    private int salary; 

    public Profession(String job, int salary) { 
     this.job = job; 
     this.salary = salary; 
    } 
} 

不同的想法,可能模型的繼承關係是ProfessionalPerson,但相信上面的造型是最準確的。

class ProfessionalPerson extends Person { 
    private String job; 
    private int salary; 

    public ProfessionPerson(String name, int age, String job, int salary) { 
     super(name, age); 
     this.job = job; 
     this.salary = salary; 
    } 
} 

此外,你應該總是使用描述變量名,所以任何人閱讀你的代碼可以決定哪些變量是什麼意思。請記住,我遺漏了任何錯誤處理和默認構造函數。

+0

是的,關鍵的東西。人不應該用專業來擴展,但如果必須這樣做(因爲這不是真正的生活項目,而是一些練習),Robin回答說。 – Igor

+0

@我的任務是要求「用對象專業擴展對象人」(即包含專業) –

1

我覺得是這樣的:

public Profession(Person p, String j, int s) 
{ 
    super(p.getName(), p,getAge);//asuming you hava getters for name and salary 
    jobName = j; 
    salary = s;   
} 
+0

這是完全不合邏輯的有'Profession'延伸,並具備'Person',它是不是有什麼任務要求的OP做 –

0

您可以擴展Person創建ProfessionalPersonProfession(財產)太