2016-04-14 49 views
0

Çocuk Sınıfı Sınıf Veli geliştirdiğimizi varsayalım. Çocuk sınıfında nested1 ve nested2 olmak üzere iki yuvalanmış sınıf vardır. İç içe yerleştirilmiş1 ve iç içe geçmiş 2 olarak döndürme türüyle bağımsız olarak tanımlanabilecek soyut bir işlev istiyorum. Şimdilik, bunu başarmak için, hem bağımsız değişken hem de nesne olarak nesne olarak bir işlev oluşturdum.İç içe geçmiş nesnelere sahip Ebeveyn Sınıfı ve Çocuk Sınıfları ile devralma işlemi

Şimdi, alt sınıfı uyguladığımda, her zaman Nesneyi iç içe1 ve iç içe2'ye dökmem gerekiyor. Bunu başarmanın daha iyi bir yolu olacağını hissediyorum. Karmaşıklığı azaltmanın daha iyi bir yolu var mı?

Ayrıca enter image description here

cevap

3

görünümünde bir tipleme açısından en iyi yol çocukta iç içe sınıfları belirtmek üst sınıfı içinde arayüzleri yapmaktır UML ekli. Bu şekilde argümanı func'e dökmeniz gerekmeyecek. Bu, karmaşıklığı kendi başına azaltmaz, ancak niyetinizi çok daha temiz hale getirir ve döküm ihtiyacını azaltır/ortadan kaldırır (her zaman iyi bir şey).

public abstract class Parent { 

    interface Interface1 { 
     //Specifications of methods that all child nested classes must have 
    } 

    interface Interface2 { 
     //Specifications of methods that all child nested classes must have 
    } 

    public abstract Interface2 func(Interface1 obj); 

} 

public class Child extends Parent { 

    private static class Impl1 implements Interface1 { 
     //Implementations of methods in Interface1 as they pertain to Child 
    } 
    private static class Impl2 implements Interface2 { 
     //Implementations of methods in Interface2 as they pertain to Child 
    } 


    @Override 
    public Interface2 func(Interface1 obj) { 
    //Should only have to use methods declared in Interface1 
    //Thus should have no need to cast obj. 

    //Will return an instance of Impl2 
    return null; 
    } 
} 

Daha geniş ölçekte, her çocuğun kendi yuvalanmış sınıf kümesine neden ihtiyaç duyduğunu kendinize sormalısınız. Yuvalanmış sınıf tanımlarını ebeveyne taşıyabiliyorsanız (ve bunları statik hale getirdiğinizde) ve yalnızca çocuk sınıflarının bunları yapım sırasında gerektiği gibi özelleştirebilmeniz daha kolay olacaktır.

+0

Teşekkürler! . Yuvalanmış sınıfların tanımı tüm çocuklarda farklıdır. Bu yüzden onları ayrı statik sınıflar haline getiremiyorum. Tasarımı daha fazla geliştirebileceğimi düşünebilir misin? – mc20

+0

Bu düşünce, tasarım sorusunun neden ebeveynte soyut yönteme ihtiyaç duyduğudur? Bende, "p = ..." adlı bir ailem var ve onun türünü bilmiyorum, belki de doğru args ile "p.func (...)" diyebilir miyim? Eğer soyut bir yönteme sahip olmanın bir anlamı yok ise – Mshnik