Java-无法对非静态字段进行静态引用

时间:2017-05-15 10:00:59

标签: java static static-methods

好的,所以我在多年后重新访问java,当我发现我在下面的代码片段中出错时,我只是尝试了一些随机程序。有人可以告诉我如何解决这个问题吗?我知道静态方法将无法访问非静态变量,但我为它创建了一个实例吗?此外,我没有找到任何其他问题,所以尽量帮助我。

 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);
        }
    }

3 个答案:

答案 0 :(得分:3)

您可能打算访问您创建的实例的实例变量:

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

由于x不是静态变量,因此如果不指定phone类的实例,则无法访问它。

当然这也会失败,除非你将x的访问级别更改为public(这是可能的但不可取的 - 你应该使用getter和setter方法而不是直接操作实例变量来自在课外)。

答案 1 :(得分:1)

x不是static。您需要通过对象引用来访问它。

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

此外,最好坚持使用Java命名约定

答案 2 :(得分:0)

几乎在那里,我做了一些小但非常重要的改变,我希望你得到这个,否则只是问; - )

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);
        }
    }

OR私人内部课程:

  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);
        }

    }
}