2017-07-22 28 views
-3

爲了解決一個問題,我正在修改Java的一些老派概念。我已經寫了下面的代碼,我正在嘗試在同一個類中創建多個類的對象,並使用main中的這些對象調用方法。java中的多個類的對象

class a { 
    public void display() { 
     System.out.println("inside class a"); 
     a a1= new a(); 
    } 
} 

class b { 
    public void display() { 
     System.out.println("inside class b"); 
     b b1= new b(); 
    } 
} 

public class one { 
    void display() { 
     System.out.println("inside class one"); 
    } 

    public static void main(String[] args) { 
     one o = new one(); 
     a1.display(); 
     b1.display(); 
     o.display(); 
    } 
} 

我得到的對象無法解析錯誤。我的問題是我需要改變以讓上面的代碼工作。而且,我是否需要總是在main()中聲明對象。

任何幫助將高度讚賞

+0

a1'的'的_scope_和'b1'僅在其包含的方法可見。你應該在主要方法內創建對象,它應該沒問題。 –

+0

正確,也可以使其在main方法所在的班級一個可見的?事實上,我想創建自己的主 – newuser

+0

'a1'&'b1'對象必須聲明和實例化的主內。 –

回答

0

我不確定你爲什麼想這樣做,但假設你只是想知道實現這樣的事情的可能性 - 是的,它可以做到。

您可以創建一個類的實例是同一個類裏面,像這樣:

public class A { 
    public static A instance = new A(); 

    public void display() { 
     System.out.println("inside class A"); 
    } 
} 

注重在上面的代碼static改性劑;它可以讓你立刻從另一個地方(類,方法,main)像這樣訪問instance

A.instance.display(); 

如果你想知道你是否可以宣告一個方法裏面的變量,而不是一個類,使其可以從另一種方法訪問,那麼答案是 - 不,你不能。

0

是的,你需要聲明裏面的的main()

class a { 
    public void display() { 
     System.out.println("inside class a"); 
    } 
} 

class b { 
    public void display() { 
     System.out.println("inside class b"); 
    } 
} 
public class one { 
    void display() { 
     System.out.println("inside class one"); 
    } 
    public static void main(String[] args) { 
     a a1= new a(); 
     b b1= new b(); 
     one o = new one(); 
     a1.display(); 
     b1.display(); 
     o.display(); 
    } 
} 
0

對象不知道你想達到什麼,是的,你應該創建主函數內的類a和類b的對象使用這些類的實例方法。

package com.stack.overflow; 

    class a 
    { 
     public void display() 
     { 
      System.out.println("inside class a"); 
      //a a1= new a(); ---> No need of this line as you can 
    // directly access instance variables and methods directly without 
    // creating any object or you can also use **this** keyword for the same 
     } 
    } 

    class b 
    { 
     public void display() 
     { 
      System.out.println("inside class b"); 
      //b b1= new b(); ---> No need of this line as you can 
    // directly access instance variables and methods directly without 
    // creating any object or you can also use **this** keyword for the same 
     } 
    } 


    public class one 
    { 
     void display() 
     { 
      System.out.println("inside class one"); 
     } 
     public static void main(String[] args) { 

      one o = new one(); 

      a a1=new a(); 
      b b1=new b(); 

      a1.display(); 
      b1.display(); 
      o.display(); 

     } 
    } 
0

您可能會發現答案,你的困惑容易 - @ ratul-sharker:a1 & b1必須聲明和實例化的主內。以及其他答案在這裏糾正你的代碼。

真正的問題是您的作用域和變量一生的概念 - 不僅a1b1謊言類ab,但他們已經被實例化內部方法,因此它們是本地內。因此,試着瞭解字段變量和局部變量之間的區別 - 它們的生命週期和範圍有很大的不同。

直接訪問本地變量像(其中將當調用該方法實例化)好像叫在本請求的結果從未來。請注意,只要對象處於活動狀態,字段變量將保持不變,但局部變量僅在方法調用期間保持不變。

希望現在很明顯。

而且,你的問題:

我的問題是,是否有可能在 同一個類來創建一個類的對象,並從主打電話了嗎?

是的。因爲main是一個靜態方法,所以它不像非靜態方法那樣綁定到一個對象。靜態方法是類級別,而非靜態方法是對象級別。你也可以在這個問題的非靜態方法中創建一個實例。