2016-11-04 86 views
5

Basit üç sınıf vardır:Büyükanne ve büyükbabadan gelen mirasın içinde bir seviye nasıl atlanır?

class A { 
    public A(int a){ } 
} 

class B extends A { 
    public B(int b){ super(b); } 
} 

class C extends B { 
    public C(int c){ super(c); } 
} 

Yani, sınıf örneklemesini sırasında yürütme sırasını C-> B-> A-> B-> C ve tüm nesneleri düzgün örneği. Sonra, soru:

Bir şekilde böyle C sınıf için bir kurucu Yazamam:

public C(int c){ 
    super.super(c); 
    } 

fikir değil hemen üst B'den A sınıfından kurucusunu çağırmak için bu mümkün mü ?

+2

Eh, bu yüzden sadece 'A (c)' diyoruz, burada kılınmasını hiçbir yöntem vardır. (Bunun bir yazım hatası olduğunu varsayıyorum - lütfen probleminizi gerçekten göstermek için lütfen kodunuzu düzeltin). –

+2

Kod şu anda derlenmiyor çünkü kurucuları bildirmiyorsunuz - sınıflarla aynı isimleri olan yöntemleri açıklıyorsunuz. –

+1

A, kurucu, yani sanırım. OP belki de mimarisini düşünmeli. – Jeremy

cevap

10

Hayır bunu yapamazsınız. Bir heirarchy

Tüm sınıflar inşa edilmesi gerekiyor. bypass, B'un yapısını oluşturamazsınız.

Ne olabilir yapmak esasen no-op var B bir protected yapıcı yazmak ve C yılında yapıcısı o çağırmak.