2016-04-07 26 views

cevap

1

Başlangıçta a değeri 0 A

package testing; 

public class ClassA extends ClassB { 

    public void print(){ 
     System.out.println("a= " +a); 
    } 
    public static void main(String arg[]){ 
     ClassA ca = new ClassA(); 
     ca.print(); 

    } 
} 

Sınıf B ve almak nasıl varsayılan olarak, new ClassA(); aradığınızda, 0 olarak başlatılır. Böylece, çıktı olarak 0 alırsınız.

a değerini 2 olarak ayarlamak için send yöntemini çağırmanız gerekir. Çok temelde 0.

yazdırma işlevi önce send() bir çağrı koy olan int bir, Derleyici olacak ilk onay için başlatıldı değerine yazdırıyor, buna herhangi bir değeri atamadan ca.print() aradığınız

ClassA ca = new ClassA(); 
ca.send(); //Here 
ca.print(); 
0

ClassA içinde işlev göndermek için, onu bulamadığında SuperClass öğesinin B fonksiyonunu çağırır, bu sizin değişkeninize '2' değeri atar a, print()'u çağırdığınızda, A Sınıfı'nda mevcut yazdırma fonksiyonu çağrılır. Şimdi A Sınıfı, A adında bir değişkene sahip değildir, bu nedenle değişken a'nın değeri süper sınıftan çağrılır ve 2 değeri yazdırılır. Kod gibi görünmelidir

->

public class ClassA extends ClassB { 

    public void print(){ 
     System.out.println("a= " +a); 
    } 
    public static void main(String arg[]){ 
     ClassA ca = new ClassA(); 
     ca.send(); 
     ca.print(); 

    } 
} 

public class ClassB { 
int a; 


public void send(){ 
    a=2; 
} 
} 
+0

yardımcı olur. OP'nin biçimlendirmesi korkunç. – bcsb1001

+0

Ancak ne olursa olsun() çağrısı gönder() sonra "gönder()" yönteminin içinde çok daha fazla işlevi vardır.Eğer yukarıdaki gibi yaparsam diğer yöntemleri/mantığı da çağırır/yürütür. Ne yapmalı – DoubtClear

+0

Herhangi biri benim şüphem? – DoubtClear

0

Sizin int değişkenler, varsayılan olarak, 0.

Bazı seçeneklerle başlatılır:

A) send için ana yöntem Alter yöntem

ClassA ca = new ClassA(); 
    ca.send(); //set the value to 2 
    ca.print(); 

B) Ana yönteminizi değiştirmek istemiyorsanız (herhangi bir nedenle) , Sınıf construtor değişken başlatma taşıyabilirsiniz:

ClassA() { 
     a = 2 
    } 

Şimdi, sınıf (yeni Sınıf A()), 'a' olacağını 2.

1

başka kolay yolu eşittir senin örneğini zaman Sınıflar arasındaki değişkenlerin ayrıştırılmasının anlaşılması, get-set yöntemlerini kullanmaktır.

A sınıfı kodlama:

public class ClassA extends ClassB {  
public static void main (String [] args) 
{   
    ClassB ClassBValue = new ClassB(); 
    System.out.println(ClassBValue.getA()); 
} 

}

B sınıfı kodlama:

public class ClassB { 
    int A = 2;  
    public int getA() 
    { 
     return A; 
    } 
    public void setAValue(int A) 
    { 
     this.A = A; 
    } 
} 

Umut bu kod hiç böyle bakmak gerekir

İlgili konular