티스토리 뷰

You can use polymorphism to solve that problem.
First define the base class/abstract class/interface with the method generateItem(), derive specified classes and override/implement generateItem() method.
Here is implementation with interface:

interface Base{
    void generateItem();
    }
    class Derived1 implements Base{
        @Override
            public void generateItem() {
                    System.out.println("generateItem() from Derived1");
                        }
                        }
                        class Derived2 implements Base{
                            @Override
                                public void generateItem() {
                                        System.out.println("generateItem() from Derived2");
                                            }
                                            }
                                            class Main {
                                                public static void main(String[] args) {
                                                        List<Base> list = new ArrayList<>();
                                                                list.add(new Derived1());
                                                                        list.add(new Derived2());
                                                                                list.forEach(Base::generateItem);
                                                                                    }
                                                                                    }
                                                                                    

출력은 다음과 같습니다.

generateItem() from Derived1
generateItem() from Derived2

자세한 내용은 여기에서 다형성에 대해 읽을 수 있습니다 .

-------------------

관용적 접근 방식은 추상적 정의하는 것입니다 generateItem()에를 Enchant. Enchant어떤 이유로 든 수정할 수없는 경우 의 추상 하위 클래스를 Enchant만들고 모든 하위 클래스가이를 상속하도록 할 수 있습니다 .

generateItem()모든 하위 클래스가 인터페이스 유형을 구현하고 .NET Framework에 저장 하는 인터페이스를 만들 수도 있습니다 ArrayList.

어떤 이유로 든 이러한 작업을 수행 할 수 없다면 디자인을 재고해야합니다. 그러나 마지막 수단으로 리플렉션을 사용하여 generateItem각 개별 하위 클래스 에 동적으로 액세스 할 수 있습니다 . 그냥 전화 .getClass()하고 방법을 조회하고 호출합니다.

-------------------

Enchant서브 클래스가 구현해야하는 추상 메서드를 제공 합니다. 추상적으로 만드는 것은 Enchant메서드의 정의가 필요하지 않지만 하위 클래스는 필요하다는 것을 의미 합니다.

public class Enchant {
    public abstract Item generateItem();
    }
    

이 메서드는 static코드에 있는 메서드가 아니어야 합니다. 의 인스턴스에서 호출하기 때문에 인스턴스 메서드 여야합니다 Enchant.

-------------------

인터페이스 또는 추상 클래스로 인챈트를 만들고 파생 클래스에서 확장



출처
https://stackoverflow.com/questions/39940086
댓글
공지사항
Total
Today
Yesterday
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31