2011-09-15 31 views
0

我有一个已经创建的Person类及其各自的属性;最终一个人可以变成员工。如何专业课程有什么选择或最佳做法?

使用继承,Employee可以是Person的子类。如何将这个Person转换(“专门化”)到一个Employee而不需要将它的所有属性转换到新的Employee类?

拥有一个独立的(关于继承)具有Person类型属性的Employee类(如在DB中经常见到的)是否更好?

在此先感谢!

+3

@downvoter,请帮助OP改善他的问题,而不是默默地downvoting和投票结束。 – davin

+2

我不太明白这个问题 - 你的意思是说你最终想从'Person'创建一个'Employee'的实例吗?你可能会想'Employee.fromPerson(person)'或类似的东西。 –

回答

3

这在Java中不可行。一个对象有一个类型,并且不能获得一个新类型。如果它是一个人,它将永远是一个人,永远不会是一名员工。您可以创建一个新的对象类型员工的,从一个人,虽然:

public class Person { 
    private String name; 

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

    /** 
    * copy constructor 
    */ 
    protected Person(Person p) { 
     this.name = p.name; 
    } 

    // ... 
} 

public class Employee extends Person { 
    private String badge; 

    public Employee(Person p, String badge) { 
     super(p); 
     this.badge = badge; 
    } 

    // ... 
} 
0

据我了解,问题是的传承(IS-A)或成分(具有-A)?

一般来说,这些通常是替代品。一般而言,继承性破坏了封装,所以它不应该被过度使用/滥用,但Java根本不支持组合语言。

具体说明 - 员工始终是Person,所以将其作为子类是的正确方法。它可以被模拟为组合,Person实例是Employee类的一个属性,但是说“Employee has Person”(属性)听起来很奇怪,所以我会避免它,除非我有这种解决方案的其他原因。

相关问题