2014-11-25 5 views
0

수퍼 클래스 개체를 기반으로 서브 클래스 개체를 만드는 방법은 무엇입니까?수퍼 클래스의 서브 클래스 인스턴스

예 :

class Super { 
    private int id; 
    private String name; 

    public int getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 


class Sub extends Super { 
    private String lastName; 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 
앞서 만든 '슈퍼'의 특성을 가진 '하위'개체를 만들 수 있습니다 방법


public class Test { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Super sup = new Super(); 
     sup.setId(1); 
     sup.setName("Super"); 

     Sub sub = new Sub(); 

     System.out.println(sub.getName()); 
    } 

} 

?

아니면 내가 같이 수동으로 속성을 통과해야합니다

sub.setName(sup.getName()); 
sub.setId(sup.getId()); 
+0

사용 사례는 무엇을 갈 수있는 방법이 있나요? 왜 그게 필요하니? – nrainer

+0

@nrainer'Version'을 확장하는'FirmwareVersion'과'SoftwareVersion' 클래스가 있습니다. 사용자는 하나 이상의 버전을 목록에 추가 할 수 있습니다. 그래서 나는'new Version()'을 호출한다. 사용자가 '저장'버튼을 클릭하면 펌웨어 또는 소프트웨어 버전인지를 선택해야합니다. 그럼 나는'새로운 FirmwareVersion()'또는'new SoftwareVersion()'을 호출 할 수있다. – Franchesco

+0

Ok. 그럼''버전''의 인스턴스를 만드는 것을 피할 수 없다고 가정합니다. 그렇습니까? 우리는 웹 애플리케이션에 대해 이야기하고 있습니까? – nrainer

답변

2

당신이 Super 클래스에 복사 생성자를 추가 할 수

public class Super { 
    private int id; 
    private String name; 

    public Super(String id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    public Super(Super other) { 
     this.id = other.id; 
     this.name = other.name; 
    } 

    public int getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

이 하위 생성자를 하위 클래스

에 사용하십시오. 16,
class Sub extends Super { 
    public Sub(Super other) { 
     super(other); 
    } 

    private String lastName; 

    public String getLastName() { 
     return lastName; 
    } 

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

당신은

Sub sub = new Sub(sup); 
1

나는 서브의 정적 메서드를 만들어 갈 것입니다 :

Sub.fromSuper(Super s, String last) 
1

가 나는 그것 정말 모든 객체에 필요하지 않는 한 나는 클래스 자체에 메서드를 추가 할 것 아파치 평민

BeanUtils.copyProperties(toBean, fromBean); 

을 사용 호출 할 수 있습니다. BeanUtils는 특정 상황에서만 필요한 것처럼 보이는 것처럼 적절합니다. 당신이 정말 copy constructor를 구현하는 것보다, 모든 객체에 동작을해야하는 경우에

관련 문제