2015-12-23 27 views
-1
class A 
{ 

    class B b; 

    B b = new b(); 
} 

class B extends A 

{ 

    b.function(); 

} 

這裏可以使用與A中創建的相同對象嗎?在Java中,在超類中創建的某些類的對象是否可用於子類

+6

你爲什麼不嘗試它,讓我們知道? ;):) :) –

+1

嘗試一下.......... –

+1

(編寫有效的Java幫助。另外,[閱讀現有的介紹](https://docs.oracle.com/javase/tutorial/java /IandI/subclasses.html))。 – user2864740

回答

0

以下是你的程序:

class C { 
    public String cvariable; 
    public void cfunction(){ 
     System.out.println("string"); 
    } 
} 

class A { 
    public C c1; 
    public void funtiona(){ 
     c1 = new C(); 
    } 
} 

public class B extends A { 
    public void functionb(){ 
     c1.cfunction(); 
    } 
    public static void main(String args[]){ 
     B b = new B(); 
     b.functionb(); 
    } 
} 

它是正確拋出空指針異常。其步驟如下:

  • 在main方法調用functionb()
  • functionb()你叫cfunction()與C1,C1,但僅僅是C型的變量(如尚未初始化),其中包含空值。所以得到空指針異常。
+0

C1處於甲實例化,C1是否不能被B對象進行訪問。 – pretz

+0

c1被實例化,但是你沒有調用實例化c1的'functiona()'。所以在這種情況下,它沒有實例化 – amit

+0

還有一件事,你不能在父類中實例化一個子類對象並在子類中使用它......它將是一個無限循環。看到我的下一個答案 – amit

0

請參見下面的程序,它會拋出java.lang.StackOverflowError

class B{ 
    A a = new A(); 
    public B(){ 
     System.out.println(a.hashCode()); 
    } 
} 

public class A extends B{ 
    public void show(){ 
     a.hashCode(); 
    } 

    public static void main(String[] args){ 
     new A().show(); 
    } 
} 

這是因爲程序進了死循環,在創建一個子類對象調用父類的構造,並在父類前散列碼再次調用子類的構造函數。所以一個無限循環

相關問題