# Why am I Accessing Private Variables

**URL:** <https://discourse.processing.org/t/why-am-i-accessing-private-variables/29607>\
**Category:** Beginners\
**Tags:** homework\
**Created:** [April 24, 2021, 5:23pm UTC](https://discourse.processing.org/t/why-am-i-accessing-private-variables/29607 "2021-04-24T17:23:40Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![emersonbastos](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@emersonbastos](https://discourse.processing.org/u/emersonbastos)\
**Post date:** [April 24, 2021, 5:23pm UTC](https://discourse.processing.org/t/why-am-i-accessing-private-variables/29607/1 "2021-04-24T17:23:40Z")

</div>

Hi,

I’m learning to program with Processing and a question came to me !  
I created a class called Estrela (Star) and I created some private attributes in it, but I’m noticing that I can access these private variables from my main file … Is this normal?

//The Estrela class

```auto
class Estrela
{
  private float x,y;
  private float speed;
  private color cor;
  Estrela(float x, float y, float speed, color cor)
  {
    this.x = x;
    this.y = y;
    this.speed = speed;
    this.cor = cor;
  }
  
  void Draw()
  {    
    strokeWeight(3);
    stroke(cor);
    point(x, y);
    x = x - speed;
    if(x < 0)
    {
      x = width;
    }
  }
}

```

//the main file

```auto
import processing.sound.*;
color[] corEstrelas = {#626262, #898787, #CBC9C9, #ffffff };
Estrela[] estrelas;

void setup()
{
  size(800,600);
 inicializaEstrelas();
  
}

void draw()
{
  clear();
  background(0);
  for(Estrela estrela: estrelas)
  {
    //a test -> Why can I acess this private variable of Estrela instance
    estrela.x = 10;// <-- x is a private variable but this give no error ??!! 
    //---------------------
    
    estrela.Draw();
    
  }
}

void inicializaEstrelas()
{
   estrelas= new Estrela[600];
  for(int i=0;i<estrelas.length;i++)
  {
    int x = int(random(0,width));
    int y = int(random(0,height));
    float speed = random(0.5f,5);
    color cor = corEstrelas[int(random(0,corEstrelas.length))];
    //int x, int y, float speed, color cor
    estrelas[i] = new Estrela(x,y,speed,cor);
  }
}

```

---

<div class="post-metadata">

**Author:** ![micuat](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/micuat/32/19407_2.png) [@micuat](https://discourse.processing.org/u/micuat)\
**Post date:** [April 24, 2021, 5:58pm UTC](https://discourse.processing.org/t/why-am-i-accessing-private-variables/29607/2 "2021-04-24T17:58:21Z")

</div>

Hi! Welcome to the forum!

yes it’s weird 🙂 I know a bit of background but I had to do a bit more research to fully understand the logic. Basically, your code is first compiled to a single Java code (I generated it by `processing-java` command) :

```auto
import processing.core.*; 
import processing.data.*; 
import processing.event.*; 
import processing.opengl.*; 

import java.util.HashMap; 
import java.util.ArrayList; 
import java.io.File; 
import java.io.BufferedReader; 
import java.io.PrintWriter; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.IOException; 

public class discourse29607 extends PApplet {

  int[] corEstrelas = {0xff626262, 0xff898787, 0xffCBC9C9, 0xffffffff };
  Estrela[] estrelas;

  public void setup()
  {
    
  inicializaEstrelas();
    
  }

  public void draw()
  {
    clear();
    background(0);
    for(Estrela estrela: estrelas)
    {
      //a test -> Why can I acess this private variable of Estrela instance
      estrela.x = 10;// <-- x is a private variable but this give no error ??!! 
      //---------------------
      
      estrela.Draw();
      
    }
  }

  public void inicializaEstrelas()
  {
    estrelas= new Estrela[600];
    for(int i=0;i<estrelas.length;i++)
    {
      int x = PApplet.parseInt(random(0,width));
      int y = PApplet.parseInt(random(0,height));
      float speed = random(0.5f,5);
      int cor = corEstrelas[PApplet.parseInt(random(0,corEstrelas.length))];
      //int x, int y, float speed, color cor
      estrelas[i] = new Estrela(x,y,speed,cor);
    }
  }
  class Estrela
  {
    private float x,y;
    private float speed;
    private int cor;
    Estrela(float x, float y, float speed, int cor)
    {
      this.x = x;
      this.y = y;
      this.speed = speed;
      this.cor = cor;
    }
    
    public void Draw()
    {    
      strokeWeight(3);
      stroke(cor);
      point(x, y);
      x = x - speed;
      if(x < 0)
      {
        x = width;
      }
    }
  }
  public void settings() { size(800,600); }
  static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "discourse29607" };
    if (passedArgs != null) {
      PApplet.main(concat(appletArgs, passedArgs));
    } else {
      PApplet.main(appletArgs);
    }
  }
}

```

notice that your class is nested inside `PApplet`. And it seems like when classes are nested, both inside and outside class have access to private members:

[https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html](https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html)

You might ask why Processing nest classes. It’s because, for example, `strokeWeight` and `point` are members of `PApplet`, so thanks to nesting, you can use them as if they are global functions. You can also create your class in a new tab as `.java` file, and then it won’t be nested in `PApplet` (I suppose). This case you can use `private` as you expect, but the class won’t have access to functions like `strokeWeight` because it is outside `PApplet`.
