2017-12-13 22 views
2

오늘이 개 다른 클래스를해야 객체를 표현할 수 나는 코드에 다음 작업 주어졌다 : 당신이 두 개의 클래스가어떻게 같은 시간에 내가 OOP에서 테스트했다

상상을 직원이 됨)와 닌자 (Ninja)가 있습니다. 직원은 국가와 행동 모두를 가지고 있습니다. 닌자는 행동 만합니다. 당신도 닌자 인 직원을 대표해야합니다 (현실 세계의 일반적인 문제). 하나의 인터페이스와 단 하나의 클래스 (NinjaEmployee) 만 작성함으로써 원래 클래스 중 하나에서 메소드 구현 코드를 복사하지 않고도이를 수행 할 수있는 방법을 보여줍니다. 주요 방법으로 코드를 테스트하는

정말 잘 문제를 이해하지 못했지만, 이것이 내가 함께 제공된 솔루션 (I는 질문을 받았다 무엇을하지 알고) :

내가 주를 제외하고 4 개 클래스를 만들었습니다. 직원 상태와 행동이 있기 때문에이 코드를 내놓았다 :

public class Ninja { 

    public Ninja(){} 


    public void moveNinja(){ 
     System.out.println("Ninja moved"); 
    } 
} 

클래스 NinjaEmployee :에 이해가되지 않습니다

public class NinjaEmployee extends Employee implements MyInterface { 

    public NinjaEmployee(int ID, String Name, double salary) { 
     super(ID, Name, salary); 
    } 

    public void moveNinja() { 
     System.out.println("Ninja Moved"); 
    } 

} 

인터페이스

public class Employee { 
    private int ID; 
    private String Name; 
    private double salary; 

    public Employee(int ID, String Name, double salary) { 
     this.ID = ID; 
     this.Name = Name; 
     this.salary = salary; 
    } 

    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; 
    } 

    public double getSalary() { 
     return salary; 
    } 

    public void setSalary(double salary) { 
     this.salary = salary; 
    } 

    public void startWorking() { 
     System.out.println("Started Working"); 
    } 
} 

클래스 닌자는 동작을 가지고 내 코드 :

public interface MyInterface { 

    public void moveNinja(); 
    public void startWorking(); 

} 

개 Main 클래스 :

public static void main(String[] args){ 
    MyInterface em = new NinjaEmployee(123,"Sandro",1000000); 
    em.moveNinja(); 
    em.startWorking(); 
} 

내 질문은 다음됩니다 :

1) 특히/기술적 시험에서 무엇을 질문했다?

2) 주어진 문제에 대한 올바른 접근 방식/코드는 무엇입니까?

+0

@ OleV.V. 주어진 문제에 대한 올바른 접근이라고 생각하십니까? –

+0

"... 원래 클래스 중 하나에서 메서드 구현 코드를 복사하지 않고도 ..."이라는 이론적 지식이 부족하기 때문에 뭔가 빠져있는 것처럼 느껴집니다. 당신은'Ninja'에서'NinjaEmployee'로'moveNinja' 메쏘드를 복사했습니다, 그래서 당신이 그것을 보았을 때 여러분은 완전히 요구 사항을 충족시키지 못하고 있습니다. 나는 작곡을 생각할 것입니다 (그것이 무엇을 의미하는지 안다면). –

답변

-1

당신은 클래스를 확장 할 수 있습니다 당신은 자식 클래스가 부모 클래스 생성자 그런 다음 당신은

배열에 직원을 추가하는 생성자에서 다른 클래스의 개체를 만들 수 있습니다 호출 인스턴스화 그래서 때마다 1 객체 2의 클래스 ES를 생성하지 못할 및 닌자에 직원을 추가하는 옵션을 추가 하시겠습니까? 1.yes 또는 2.no? 에 해당하는 경우 닌자에 추가 ... 다음 주 방법에서 닌자의 이름을 하나씩 반복하여 사용하십시오.

+0

나는 할 수 없다는 것을 안다, 당신이 신중하게 글을 읽으면 주어진 과제가 주어진다. 주어진 문제에 대한 정확한 접근법을 알고 싶다. –

+0

편집 된 대답. – user

0

정답을 모르십니까? (작업이 다소 엄격하게 정의되어 있지는 않지만 명확하지 않은 순간이 있습니다) 하지만 난 이런 식으로 할 것입니다 :

public interface IAmNinja { 
    public void moveNinja(); 
} 

public interface IAmEmployer { 
    public void startWorking(); 
} 

public class NinjaEmployee implements IAmNinja, IAmEmployer { 
    private Ninja _ninja; 
    private Employer _employer; 

    public NinjaEmployee(int ID, String Name, double salary) { 
     _employer = new Employer(ID, Name, salary); 
     _ninja = new Ninja(); 
    } 

    public void moveNinja() { 
     _ninja.moveNinja(); 
    } 

    public void startWorking() { 
     _employer.startWorking(); 
    } 
} 
+0

오직 하나의 인터페이스 ?? –

+0

그 추한 :) 어쩌면 당신은 더 결과 중심이지만, 나는 더 나은 디자인을 선호합니다. 예, 우리는 상속을 구현 구현을위한 불쾌한 해킹으로 사용할 수 있습니다. 심지어 0-1000 개의 인터페이스로 끝날 수도 있지만 프로그래밍이나 해킹을 원하십니까? –

0

좋은 질문.
질문의 요점은 다음과 같습니다

  1. 우리가 하나의 인터페이스를 사용해야합니다.
  2. 닌자 클래스에는 속성이 아닌 몇 가지 메소드가 있어야합니다.

그래서 이러한 핵심 사항을 사용해보십시오.모든

enter image description here

첫째 : 우리는 Employee 클래스가 다른 간단한 클래스처럼 구현

나는 아래의 클래스 다이어그램을 제공합니다. 구현 된 속성 및 클래스가 있습니다.

둘째 : 우리는이라는 인터페이스를 가지고 있는데, 여기에는 ninja에 대한 메소드 선언이 있습니다. (moveNinja1moveNinja2)

셋째 : 구현 (또는 실현) Nijna_InterfaceNinja_Interface의 모든 메소드 선언의 일부 구현이 Ninja 클래스입니다.

4 번째 : NinjaEmployee 클래스입니다. Employee에서 물려 받았습니다. 그래서 그것은 모든 Employee의 속성과 메소드를 가지고 있습니다. 또한 Ninja_Interface을 구현합니다. 그래서 모든 Ninja_Interface 메소드 선언을 구현해야합니다. 반면에 NinjaEmployeeNinja의 인스턴스를 가지고 있습니다 (Ninja 클래스는 모두 Ninja_Interface 메서드를 구현합니다).
, Ninja_Employee 클래스에서 Ninja_Interface 메서드 구현시 Ninja 인스턴스 메서드를 호출하여 호출 할 수 있습니다.

예를 들어 NinjaEmployee의 일부 코드 다음과 같다 :

private Ninja ninja=new Ninja(); 
public void moveNinja1() 
{ 
    ninja.moveNinja1(); 
} 
public void moveNinja2() 
{ 
    ninja.moveNinja2(); 
} 

홈페이지 질문입니다 : Ninja 클래스 는 몇 가지 방법을해야하는 이유?
Ninja 클래스는 단지 Ninja_Interface 메서드의 구현이며 특성을 가질 필요가 없습니다. 따라서 인스턴스가 Ninja 인 경우는입니다. 따라서 Ninja 속성은 NinjaEmployee이라는 정적 속성으로 선언 할 수 있습니다.

마지막으로 : 우리는클래스에도 닌자의 속성을 추가 할 수 있습니다.

+1

당신이 너무 많이 돕고 있다고 생각합니다. OP는 과제 자신을 해결함으로써 더 많은 것을 배울 수 있습니다. 귀하의 접근 방식은 매우 좋습니다. –

+0

@ OleV.V. 고마워, 네가 맞아. –