SORU
15 ŞUBAT 2011, Salı


Nasıl arayüzleri birden çok devralma gereğini yerine mevcut sınıflar olabilir

Özür dilerim bu yazı için öncelikle.... Birden çok devralma tartışıyor olan stackoverflow birçok birçok mesaj olduğunu biliyorum. Ama zaten Java çoklu kalıtım desteklemez ve arabirim kullanarak bir alternatif olması gerektiğini biliyorum. Ama benim ikilem görmüyorum:

Çok çok büyük ve karmaşık bir aracı Java ile yazılmış üzerinde değişiklikler yapmak zorundayım. Bu araç, bir veri yapısına bağlı üye bir hiyerarşi ile birçok farklı sınıf nesneleri ile inşa edilmiştir. Neyse

  • Bir Dersim var birden çok yöntem vardır ve bir nesne etiketi nesnenin sınıfına bağlı olarak verir, Tagged. Üyeleri ve statik değişkenlere ihtiyaç duyar.
  • Ve ikinci sınıf XMLElement denilen nesne bağlantısı ve sonunda bir XML dosyası oluşturmak için izin verir. Ben de buraya üye ve statik değişkenlere ihtiyacımız var.
  • Nihayet, neredeyse tüm XMLElement bazıları Tagged genişletmek gereken çok bu veri sınıfları var.

Tamam, bu sadece bir sınıf uzatmak olduğu için işe yaramaz. Java ile her şeyin yolunda olduğuna çok sık okudum ve birden çok devralma olması için gerek yok. Ama bir arabirim miras değiştirmeniz gerekir nasıl görmüyorum inanıyorum.

  1. Hiçbir anlamı aynı olduğundan, tüm veriler sınıflarda gerçek uygulama her zaman olur ama bu arayüzleri (sanırım) gerekli olurdu.
  2. Bir arayüz miras derslerimden biri değiştirebilirim nasıl görmüyorum. Burada değişkenler var ve tam olarak ne var.

Gerçekten biri bu konuyu bana açıklayabilir lütfen almıyorsun?

CEVAP
15 ŞUBAT 2011, Salı


Muhtemelen miras üzerinden kompozisyon (heyet) iyilik gerekir :

public interface TaggedInterface {
    void foo();
}

public interface XMLElementInterface {
    void bar();
}

public class Tagged implements TaggedInterface {
    // ...
}

public class XMLElement implements XMLElementInterface {
    // ...
}

public class TaggedXmlElement implements TaggedInterface, XMLElementInterface {
    private TaggedInterface tagged;
    private XMLElementInterface xmlElement;

    public TaggedXmlElement(TaggedInterface tagged, XMLElementInterface xmlElement) {
        this.tagged = tagged;
        this.xmlElement = xmlElement;
    }

    public void foo() {
        this.tagged.foo();
    }

    public void bar() {
        this.xmlElement.bar();
    }

    public static void main(String[] args) {
        TaggedXmlElement t = new TaggedXmlElement(new Tagged(), new XMLElement());
        t.foo();
        t.bar();
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrew_Huang

    Andrew_Huang

    10 ŞUBAT 2006
  • We've moved!

    We've moved!

    7 Ocak 2008
  • Subscribe!!

    Subscribe!!

    3 EKİM 2009