Sunday, May 17, 2009

QnA - Para saan po ba ang 'private', 'public', 'static' at 'final' sa pag declare variable?

Sige explain ko yang mga yan pero isasama ko na ang iba pa:

private
public
protected
default

itong dalawa pa:

static
final

ay ihihiwalay natin. Kasi yung static and final ay mga keywords. Yung private, public, protected at default naman ay mga access modifiers. Now lets begin:

Mga Access Modifers sa Java:

private - pinaka restrictive. Ang mga variables (fields), constructors and methods na declared na private ay hindi pwedeng gamitin ng ibang class at interface. Ang pwede lang gumamit ay yung class na kung saan declared ang fields or methods na ito. example:

Person.java:
package org.pinoyjavatutorial.myclasses;

public class Person {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

Ang pwede lang gumamit kay 'name' ay yung class na 'Person'. Kaya kung may code tayo na ganto:

MainClass3.java:
1 import org.pinoyjavatutorial.myclasses.Person;

2 public class MainClass3 {

3 public static void main(String[] args) {

4 Person human = new Person();
5 human.setName("mau dim jr");
6 System.out.println(human.name);
7 }
8 }


mag e-error yung line 6 kasi we are attempting to use the 'name' variable eh private yun kaya ang makakagamit lang nun ay si 'Person' na class.

public - pinaka least restrictive. Variables (fields), methods, constructors na declared sa isang public class ay pwedeng gamitin ng ibang class sa java kahit nasa ibang package pa sila.

Sa same example natin:

Person.java:
package org.pinoyjavatutorial.myclasses;

public class Person {

public String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

Hindi na mag e-error yung line 6 ng MainClass3.java natin kasi 'public' na si 'name'.

protected - medyo tricky to. Pag hindi same package, ang pwede lang gumamit ng variables (fields) and methods declared na 'protected' ay classes na subclass lang nya. Pag same package naman, pwede nya gamitin ang mga fields and methods na declared as protected na parang public lang sya.

default - pag wala kang nilagay na private, public or protected, ang access modifier nya ay default which is also known as 'no modifier' or kaya 'package-private'. Ang makakagamit lang ay yung mga classes na nasa same package nya.

Now, regarding static and final:

Static: isa lang ang value ng variable na static sa lahat ng instance ng class na yun. Example:

MainClass3.java:
1 package org.pinoyjavatutorial.myclasses;

2 import org.pinoyjavatutorial.main.Person;

3 public class MainClass3 {

4 public static void main(String[] args) {

5 Person human1 = new Person();
6 human1.setName("mau dim jr");
7 Person human2 = new Person();
8 human2.setName("jv dim");
9 human2.setFavoritelanguage("Japanese");

10 System.out.println("Name of human1: " + human1.getName());
11 System.out.println("Name of human2: " + human2.getName());
12 System.out.println("Favorite Language of both Persons: " + human1.getFavoritelanguage());

13 }
14 }


Person.java:
package org.pinoyjavatutorial.main;

public class Person {

private String name;
private static String favoriteLanguage;

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setFavoritelanguage(String language){
this.favoriteLanguage = language;
}

public String getFavoritelanguage(){
return favoriteLanguage;
}
}


Sa example natin, nag create tayo ng dalawang instance ng Person. Isa ay si 'human1' at ang isa pa ay si 'human2' (lines 5 and 7). Nag-set pa nga tayo ng name ng bawat isa. Ang value ng 'name' ni 'human1' ay "mau dim jr" at ang value naman ng name ni 'human2' ay "jv dim" (lines 6 and 8).

Now, tingnan mo, nagset tayo ng favorite language kay human2 (line 9). At nung nagprint tayo ay si human1 ang ginamit natin (line 12). Pero diba hindi pa tayo nagset ng value ng favorite language ni human1 pero nung nag print tayo ng favorite language nya ay pareho ng value na sinet natin kay human2 ang lumabas. Ito ay kasi static ang declaration sa 'favoriteLanguage'. Which means, kung ano ang nilagay mo sa isa, yun din ang magiging value ng lahat ng instances ng class na yun. So kung babaguhin mo yung value ni 'favoriteLanguage' kay human1, mababago din ang value ni human2 kasi nga static silang dalawa. :)

Final - as the name implies, final na sya. Kung sa class mo sya ginamit, hindi sya pwedeng magkaroon ng subclass nya. Kung sa method mo sya nilagay, hindi sya pwede ma-overridden. Kung sa variable, isang beses mo lang sya pwede lagyan ng laman at final na yun. Kung baga sa VB ay 'const' na sya.

2 comments:

  1. yes thanks so much for this tutorial.

    ReplyDelete
  2. gusto ko rin mapag aralan yan try my site Entrepreneurial Recipe

    http://my-all-recipes.blogspot.com

    ReplyDelete