2017-11-02 38 views
2

User.java (추상 클래스)비슷한 개체 유형을 어떻게 변경합니까?

public abstract class User { 

    private int id; 

    public int getId() { 
    return this.id; 
    } 

    public void setId(int id) { 
    this.id = int; 
    } 
} 

Admin.java

public class Admin extends User { 

    public Admin(int id) { 
    super.setId(id); 
    } 

    public void promoteEmployee(Employee employee) { 
    // How would I change the employee object into an admin object? 
    } 

} 

Employee.java 기본적 직원 개체 취하고로 만드는 방법에 promoteEmployee

public class Employee extends User { 

    public Employee(int id) { 

    super.setId(id); 

    } 


} 

관리 객체 어떻게 그럴 수 있니?

는 기본적으로
Employee employee = new Employee(); 

내가 그것은 또 다른 서브 클래스로 서브 클래스를 캐스팅 할 수 없습니다

Admin employee = new Admin(); 
+0

개체를 만든 후에 한 형식에서 다른 형식으로 변경할 수 없습니다. –

+0

메소드 설명 : "이 프로모션은 현재 오브젝트를 파괴하고 관리자를 나타내는 새 오브젝트를로드합니다." 어떻게 새로 만들까요? 같은 변수 이름 오류가 계속 발생합니다. –

+0

왜 관리 클래스가 필요한가요? 코드에서'if (user instanceof Admin)'를 사용하면 매우 나쁜 디자인입니다. 예를 들면 Type 열거 형 –

답변

0
여기

EmployeeAdmin으로 모두를 유지 모두 User의 하위 클래스입니다. 클래스 EmployeeAdmin 사이에 관계 (IS-A 관계)가 없습니다.

오브젝트는 EmployeeAdmin 클래스는 User 참조 변수로 보유 할 수 있습니다. 그러나 EmployeeAdmin 사이에는 그러한 작업을 수행 할 수 없습니다.

코드에 작성한 코드가 무엇이든 원하는 목표를 달성 할 수 있습니다.

이제 다음 수정에서 목표를 달성하기 위해 코드에 몇 가지 변경 사항을 제안하십시오.

public class Admin extends Employee { // change the super class from User to Employee. 

    public Admin(int id) { 
    super.setId(id); 
    } 

    public void promoteEmployee(Employee employee) { 
    // How would I change the employee object into an admin object? 
    } 

} 

지금 여기 AdminEmployee과의 관계이다. 이것은 AdminEmployee 사이의 올바른 관계입니다. 각 AdminEmployee 유형이기 때문입니다.

0

로 그 켜려고합니다. 그러나 동일한 부모 클래스를 확장하면 이점을 얻을 수 있습니다. User

User bob = new Employee(2); 
User manager = new Admin(1); 
bob = new Admin(bob.getId()) // this works! 
+0

이 작동하지만 올바른 디자인 패턴이 아닙니다. 엔티티 클래스 사이에 올바른 관계를 정의하지 않습니다. 고맙습니다 :) –

1

이 문제는 주로 patterns에 속합니다.

처음.Builder Pattern을 사용하면 을 기반으로 새 Employee을 만들 수 있습니다. (예 : new Employee(admin))

초. 당신은 AdminEmployee 모두 one 클래스를 사용하고 단순히 EmployeeAdmin을 변경 State Pattern를 사용할 수 있습니다. 이 경우 새 객체를 만들지 않고 객체를 양방향으로 빠르게 변경할 수 있습니다 (또는 User의 인스턴스가 더 많을 수도 있음).

두 가지 방법 모두 장단점이 있습니다.모두 당신의 목표에 달려 있습니다. 내 연습에서 Admin은 추가 권리가있는 Employee이므로 에 대한 boolean admin 매개 변수는 대부분의 경우 충분할 것으로 생각합니다.