Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can I access a private variable from main method?

package com.valami;

 public class Ferrari
 {
  private int v = 0;


  private void alam()
  {
   System.out.println("alam");
  }

  public Ferrari()
  {
   System.out.println(v);
  }



  public static void main(String[] args)
  {
   Ferrari f = new Ferrari();
   f.v = 5;
   System.out.println(f.v);
  }

 }

Hi all! I have one simple question.... WHY can I reach a private variable from the main method ? I know, I'm in the containing class, but it is main. I believed the main is NOT part of the class which is containing it... Then I would not to reach an private member, but I can....WHY? Please help...thx

like image 380
narancs Avatar asked Jan 16 '11 19:01

narancs


3 Answers

Main is a part of you class, you have declared it inside your class :) What main is not is part of your object, it will not be any part of the objects you create from the class but it is still part of the class. This is correct for any static function as main is just a normal static function that the framework knows it should look for when the program is executed.

like image 112
Viktor Avatar answered Sep 20 '22 12:09

Viktor


The main method is in the class Ferrari and thus can access private variables, even if it's static.

like image 27
Femaref Avatar answered Sep 22 '22 12:09

Femaref


Classes can access the private instance variables of (other) objects of the same type.

The following is also possible

public class Foo {

    private int a;

    public void mutateOtherInstance(Foo otherFoo) {
        otherFoo.a = 1;
    }
}

You could argue if this is desirably or not, but it's just a rule of life that the JLS has specified this is legal.

like image 37
Arjan Tijms Avatar answered Sep 18 '22 12:09

Arjan Tijms