2013-03-16 16 views
5

Alt sınıf nesneler süper sınıfı nasıl referans alabilir? Örneğin: ChildClass yapıcısı denir BuradaKalıtım: Alt sınıftaki taban sınıf alanlarına erişim

public class ParentClass { 

    public ParentClass() {}  // No-arg constructor. 

    protected String strField; 
    private int intField; 
    private byte byteField; 
} 


public class ChildClass extends ParentClass{ 

    // It should have the parent fields. 
} 

, tip ParentClass bir nesne oluşturulduğunda, doğru mu? o (ChildClass nesne) nasılsa ParentClass nesneye erişimi vardır, ama nasıl bu yüzden

ChildClass, ParentClass nesneden strField devralır?

+0

Kullanım süper anahtar kelime: P – Sach

+0

Bu gerçekten kötü başlığıdır. Orada bazı bağlamları göz önünde bulundurun. – Nishant

+0

Kabul ediyorum, (:-) şimdi daha iyi! –

cevap

5

ChildClass childClassInstance = new ChildClass()'u yaptığınızda yalnızca bir yeni nesne oluşturulur.

Sen tarafından tanımlanan bir nesne olarak ChildClass görebilirsiniz: ParentClass dan ChildClass + alanlardan

  • alanları. Yani alan strField ChildClass bir parçasıdır ve So

    ChildClass yapıcı tipi ParentClass bir nesne denir sizin varsayım oluşturulur

    childClassInstance.strField üzerinden erişilebilir

tam olarak doğru değil. Oluşturulan childClass örneği, bir ParentClass örneğidir ve aynı nesnedir.

1

strField ürününe, ChildClass numaralı belgede bildirilmiş gibi erişebilirsiniz. Karışıklığı önlemek için, üst sınıftaki alana eriştiğiniz anlamına gelen super.strField'u ekleyebilirsiniz.

4

ChildClass bir örneği, bir ParentClass amacı, bir ParentClass nesne bulunmamaktadır. Bir çocuk sınıfı olarak, ana sınıfındaki halka ve korumalı özniteliklere/yöntemlere erişimi vardır. Yani burada ChildClassstrField, ancak intField ve byteField erişimleri vardır, çünkü bunlar özeldir.

Belirli bir sözdizimi olmadan kullanabilirsiniz.

1

Evet. strField formuna ChildClass şeklinde özel bir işlem yapmadan erişebileceksiniz (bununla birlikte yalnızca bir örneğin oluşturulacağını unutmayın. Ebeveynin tüm özelliklerini ve yöntemlerini devralacak olan çocuk).

1

ChildClass yapıcısı numaralı nesne nesnesi çağrıldığında burada, ParentClass oluşturuldu, değil mi?

Hayır!ChildClass yapıcı üst sınıf constr denir >> denir ve ParentClass hiçbir nesne ChildClass kalıtılan ana sınıfından sadece erişilebilir alanını oluşturulur

ChildClass ParentClass OBJECT gelen strField devralır

, bu nedenle (ChildClass nesnesinin bir şekilde ParentClass nesnesine erişmesi gerekir, ama nasıl?

Hayır, sadece bir, sadece sigara arg yapıcı ve derleyici buradaki rolü iş odaklanarak yeni ChildClass

0

oluşturmaya ParentClass şablonunu yeniden olduğunu türetilmiş sınıf (ChildClass) 'ın varsayılan süre Kurucu (non-arg constructor) çağrılırken, bir alt sınıfın (ParentClass) bir alt nesnesi, derleyicinin yardım mekanizması (türetilmiş sınıftaki temel sınıf yapıcı çağrılarını ekleme) aracılığıyla oluşturulur ve türetilmiş nesnenin nesnesine sarılır.

class Parent{ 
    String str = "i_am_parent"; 
    int i = 1; 
    Parent(){System.out.println("Parent()");} 
} 
class Child extends Parent{ 
    String str = "i_am_child"; 
    int i = 2; 
    Child(){System.out.println("Child()");} 
    void info(){ 
     System.out.println("Child: [String:" + str + 
          ", Int: " + i+ "]"); 
     System.out.println("Parent: [String: ]" + super.str + 
          ", Int: " + super.i + "]"); 
    } 
    String getParentString(){ return super.str;} 
    int getParentInt(){ return super.i;} 
    public static void main(String[] args){ 
     Child child = new Child(); 
     System.out.println("object && subojbect"); 
     child.info(); 
     System.out.println("subojbect read access"); 
     System.out.println(child.getParentString()); 
     System.out.println(child.getParentInt()); 

    } 
} 

sonucu:

Parent() 
Child() 
object && subojbect 
Child: [String:i_am_child, Int: 2] 
Parent: [String: ]i_am_parent, Int: 1] 
subojbect read access 
i_am_parent 
1 
İlgili konular