简体   繁体   中英

How to access non-static variables & methods from a different class

I do not quite understand the use of "static" properly.

I have a class which includes variables that I want to access from a different class.

However, when I try to access this getter method from the different class I get an error stating:

"non-static method getAccNumber() cannot be referenced from a static context."

So, how can I find this variable's value without making it static. The problem with this is if I make it static, every instance of this object overwrites the previous value. So they all end up with the same account number in this case.

Let me explain in more detail:

I have a Class called Account, which contains a variable called accountNumber, and a getter method called getAccNumber(). I have a second class called AccountList which is a separate arraylist class to store instances of Account. I want to create a method to remove an element based upon its accountNumber. So I'm searching and using getAccnumber() within the AccountList class to compare with a user parameter and removing if correct! But I can't use this method without making it static!! Any help/explanation would be greatly appreciated :)

This is what I am trying to do:

public boolean removeAccount(String AccountNumber)

{   


    for(int index = 0; index < accounts.size(); index++)

    {

    if (AccountNumber.equals(Account.getAccNumber()))
   {

        accounts.remove(index);
        return true;
    }
}
    return false;
}

Thank you!

Let's take an example where you have

public class A {
  static void sayHi() { System.out.println("Hi"); 
  //Other stuff
}

and

public class B {
  void sayHi() { System.out.println("Hi"); 
  //Other stuff
}

Then

public class C {
  public C() {
    A.sayHi(); //Possible since function is static : no instantiation is needed. 
    B.sayHi(); //Impossible : you need to instantiate B class first
  }

A static variable is one that lives with the class itself. A non-static variable is unique to each instance of that class (ie, each object built from that class.) A static variable you can access as a property of the class, like:

SomeclassIMadeUp.numberOfFish;

so if you change the numberOfFish property for that class, anywhere you reference it, you see the change (as you've noticed.)

To have one unique to each instance, don't declare the variable as static and then add a getter and/or setter method to access it.

like

private int numberOfFish;

public int getNumberOfFish() { return (numberOfFish); }

So to your question...

Ocean pacific = new Ocean();
pacific.water = Ocean.salty;  // <-- Copying the value from a static variable in the class Ocean
                              // to the instance variable in the object pacific (which is of Ocean class).
pacific.setNumberOfFish(1000000000);

Octopus o = new Octopus();
o.diningOpportunities = pacific.getNumberOfFish();  // <-- Calls the public method to return a
                              // value from the instance variable in the object pacific.

You can check out this link for a short definition:

Static Method Definition

If you declare a variable as static, it will not be unique for each instance of the class. If you declare the variable as private only, then you can create getter and setter methods that will allow you to access the variable after you have created an instance of the class. For example, if you have classA and classB and you are working in classB and want the private int size of classA:

classA a = new ClassA();

int size = a.getSize(); //getSize() returns the private int size of classA

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM