2015-10-07 108 views
0

我剛剛開始使用java編寫代碼,並試圖將我的頭圍繞類。在java中使用公共屬性時遇到麻煩

我似乎無法在另一個類中使用公共屬性。我有3個類:一個包含主要方法;另2個是輸入輸出。我正在使用非靜態變量和方法,我不想使用靜態。

即使我已經在輸出類中實例化輸入類,輸出類無法識別公共屬性。爲什麼?

這裏有3類:

package random; 
import java.util.Scanner; 
import java.util.Arrays; 

public class random 
{ 
    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println("Please enter your first name: "); 
     input inputObject = new input(); 
     inputObject.setFirstName(); 
     output outputObject = new output(); 
     outputObject.getFirstName(); 
    } 
} 

package random; 

import java.util.Scanner; 
public class input 
{ 
    public String firstName; 
    public input() {} 
    public void setFirstName() { 
     Scanner keyboard = new Scanner(System.in); 
     this.firstName = keyboard.nextLine(); 
    } 
} 

package random; 
import java.util.Scanner; 

public class output 
{ 
    public void getFirstName() 
    { 
     input inputObject = new input(); 
     System.out.println("Your first name is " + inputObject.firstName); 
    } 
} 
+0

如果你真的想你的代碼,以那種方式行事,你可以共享類/對象的單個實例看看使用Singleton模式。除此之外別人提到的是正確的,因爲您使用輸入對象的2個不同實例。你應該做的是使用一個類,它包含屬性以及類似事件的getter和setter,比如像上面例子中使用的用戶或人的屬性名字一樣。然後你會實例化這個類,並使用getters和setter來操縱這個對象。 – rmeier

回答

1

在輸出類的的getFirstName方法創建的輸入對象是從在主方法創建的一個單獨的實例。這意味着基本上你正在創建一個輸入的新實例,其輸入不是爲firstName設置的,所以當你打印出該屬性時,沒有什麼可打印的。

另外,單個屬性的get和set方法應該在同一個類中。這樣做的一般方法是這樣的:

class Foo { 

    private String property = ""; 

    Foo() {}; //empty default constructor 

    //sets the property to what is passed in as a parameter 
    public void setProperty(String newProperty) { 
     this.property = newProperty; 
    } 

    //returns the property 
    public String getProperty() { 
     return this.property; 
    } 
} 

一般來說,所有的類屬性應該是私有的公共getter和setter方法。如果你是編程新手,建議閱讀更多內容。

0

這是因爲您使用了兩個不同的input對象。我們可以說,是因爲你的程序有以下行兩次

input inputObject = new input(); 

input對象,你分配一個名稱爲您嘗試讀取從名稱中一個不同的對象。

根本不存在類output存在。你應該在input類中有一個方法getFirstName()

(也用Java類的名稱通常以大寫字母開頭。)