2017-05-15 13 views
-2

Okですので、何年も後にJavaを再訪しています。次のスニペットでエラーが発生したことがわかったときにランダムプログラムを試していました。誰かが私にこれを解決する方法の頭を与えることができますか?私は、静的メソッドは非静的変数にアクセスすることはできませんが、私はそれのためのインスタンスを作成正しいことを知っている?また、私は他のいくつかの質問を読んで頭を上げていないので、私を助けてください。 xは、それがphoneクラスのインスタンスを指定せずにアクセスすることはできません静的変数ではないのでJava - 静的でないフィールドへの静的参照を行うことができません。

 phone xy = new phone(); 
     int y = xy.x; 

:あなたはおそらく、あなたが作成したインスタンスのインスタンス変数にアクセスすることを目的と

import java.io.*; 
    public class phone 
    { 
     int x=6; 
     int getx()//I also tried using this function but everything in vain 
     { 
      return x; 
     } 
    } 
    public class Testing_inheritance extends phone 
    { 
     public static void main (String args[])throws IOException 
     { 
      phone xy=new phone(); 
      int y=phone.x; 
      y+=10; 
      System.out.println("The value of x is " +y); 
     } 
    } 
+1

は 'int型のy = phone.x;'おそらくべきである 'int型のy = xy.x;'。 – assylias

+3

[JAVAは非静的フィールドへの静的参照を作成できません](http://stackoverflow.com/questions/19482739/java-cannot-make-a-static-reference-to-non-static-field) – dhS

+0

次回はコンソールのアウトプットを取り付けてください。 –

答えて

3

アクセスレベルをxからpublicに変更しない限り、これも失敗します(これは可能ですがお勧めできません - クラス外からインスタンス変数を直接操作するのではなく、getterとsetterメソッドを使用する必要があります)。

+0

Dude、両方とも静的変数を使っている間に動作します。この場合、クラス変数 –

+0

であるためphone.xを使うのがいっそう意味があります。もし私がxy.xをしたら、エラーが発生します:public type phoneは –

+0

@IshanSrivastavaしかし、 'x'は静的変数ではないので、' phone.x'を使うことはできません。 – Eran

1

xstaticではありません。オブジェクト参照を介してアクセスする必要があります。

また

int y = xy.getx(); //could do xy.x, but better to access through method 

を行い、それが

0

ほとんどがJavaの命名規則に固執する方が良いでしょう、私は小さいながらも非常に重要な変更を加えて、私はそうちょうど頼むあなたがこれを取得願っています;-)

Phone.java

public class Phone //<--- class with capital letter always 
{ 
    int x=6; 
    int getx()//I also tried using this function but everything in vain 
    { 
     return x; 
    } 
} 

Testing_inheritance.java

import java.io.*; 

    public class Testing_inheritance extends Phone 
    { 
     public static void main (String args[])throws IOException 
     { 
      Phone xy=new Phone(); 
      int y= xy.getx(); //<--- principle of encapsulation 
      y+=10; 
      System.out.println("The value of x is " +y); 
     } 
    } 

やプライベート内部クラス:

import java.io.IOException; 

public class Phone { 
    int x = 6; 

    int getx()// I also tried using this function but everything in vain 
    { 
     return x; 
    } 

    private static class Testing_inheritance extends Phone { 
     public static void main(String args[]) throws IOException { 
      Phone xy = new Phone(); 
      int y = xy.getx(); 
      y += 10; 
      System.out.println("The value of x is " + y); 
     } 

    } 
} 
+0

正確にはそうでなければプライベートクラスでなければなりません。私はこれをPhone.javaとTesting_inheritance.javaの2つのクラスで分けています。同じことをするか、プライベートクラスとして宣言してください – Guilherme

関連する問題