2016-04-04 105 views
-7

Java'da iki farklı nesne nesnesinde bir yöntem çağrısının nasıl çalıştığına dair bir sorum var? Örneğin, her iki sınıf SListNode ve DListNode, bir listenin uzunluğunu ölçmek için aynı yöntem boyutunu() kullanmak isterse. Hem SListNode hem de DListNode sınıflarında açıkça iki kez yazmak yerine, boyut yöntemini yalnızca bir kez tanımlamak istiyorum.Java'da polimorfizm nasıl uygulanır?

Mirasın gerekli olduğunu sanırım. Örneğin, size() yöntemini içeren bir üst sınıf boyutunu tanımlayın. Hem SListNode hem de DListNode, Boyut alt sınıflarıdır. Ancak, bu şekilde size() yöntemi tanımında belirli bir liste türü gerekir. Bu nedenle, yöntem hem SListNode hem de DListNode'a uygulanamaz.

Miras yapısının nasıl görünmesi gerektiğini veya bu tür bir sorunu çözmenin standart bir yolu varsa ne diye merak ediyordum? Sanırım var ve bu yüzden java'nın polimorfizmi var. Fakat benim için farketmez ...

+1

bir göz atın: [Java Polimorfizmi ] (https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html) –

+2

'Java.polimorfizmi (uygula); – Gendarme

+1

Olası çoğaltma [Polymorphism vs Overriding vs Overloading] (http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading) – wiredniko

cevap

0

Farklı düşünmelisiniz. Örnek için: Soyut bir liste yaratın ListNode ve içine özel bir kod koymayın (listelerin kendisini uygulamayın. ListNode için boyut yöntemini uygulayın. Örnek boyutu yöntemi için yalnızca bir özellik okuyabilir (korumalı int boyutu)

SListNode ve DListNode sınıfı ListNode uzanan ve belirli kodunu uygulama oluşturun. uygulamanızda boyut özelliği güncelleştirmek emin olun.

2

ne yapmak istediğiniz yöntemi olarak() yöntemi boyutunu koymaktır Node adlı bir sınıf gibi bir ana sınıf

Daha sonra SListNode yap ve DListNode Düğüm uzatın. Metot boyutu(), miras alınacak ve böylece onu sadece Düğüm Sınıfı'nda uygulamanız gerekir. İşte

yapısı şöyledir:

Üst sınıf:

public class Node { 

    //Parent class 

    //size() method will be inherited by children 
    public void size(){ 
    //Put implementation of size() here 
    } 
} 

Çocuklar:

public class DListNode extends Node { 

    //size() method is inherited 

    // put the rest of your body here 

} 


public class SListNode extends Node { 

    //size() method is inherited 

    // put the rest of your body here 


} 

Umut Bu yardımcı olur :)