pangwakas at iba pang mga keyword sa Java - 1

"Hi, Amigo!"

"Hi, Bilaabo!"

"Ngayon sasabihin ko sa iyo ang tungkol sa ilang mga keyword sa Java. Ngunit magsisimula ako sa pinakakawili-wili: ang panghuling keyword. "

"Maaari mong gamitin ang panghuling keyword kapag nagdedeklara ng variable, paraan, o klase."

"At bakit kailangan natin ng final?"

"Ito ay medyo simple. Kung mamarkahan natin ang isang variable bilang pinal, kung gayon ito ay magiging hindi mababago:"

final int i = 5;
i++; //Compilation error: the value of i cannot be changed.

"Nakita ko."

"Kung minarkahan namin ang isang paraan bilang pangwakas, ipinagbabawal ang pag-override sa pamamaraan sa mga nagmula na klase:"

class Cat
{
 public final String getName()
 {
  return "cat";
 }
}

class Tiger extends Cat
{
 public String getName() //Compilation error: overriding the getName()
 {
  return "tiger";
 }
}

"I see. Pero bakit kailangan mong ipagbawal ang pag-override sa isang paraan?"

"Buweno, bilang isang halimbawa, ipagpalagay na ang isang programmer ay nagsulat ng maraming mahalagang code sa isang pamamaraan at nais na garantiya na ang lahat ng mga klase na nagmamana sa kanyang klase ay magkakaroon ng tinukoy na pag-uugali."

"At sa wakas, ang pangatlong paggamit."

"Kung mamarkahan namin ang isang klase ng pangwakas na keyword, hindi ito maaaring mamana."

public final class Cat
{
 public String getName()
 {
  return "cat";
 }
}

class Tiger extends Cat //Compilation error: the Cat class cannot be
{
 public String getName()
 {
  return "tiger";
 }
}

"At bakit natin pipigilan ang pagmana ng isang klase?"

"Dapat mong maunawaan na hindi namin pinipigilan ang inheritance na maging nakakainis, bagkus para sa kapakanan ng seguridad at integridad ng code. Kung hindi ipinagbabawal ang class inheritance, ang implikasyon ay pinapayagan ito. At ang code na isinulat ng class's ang taga-disenyo ay gagana nang maayos para sa mga bagay ng klase na ito pati na rin sa mga bagay ng anumang nagmula na mga klase."

"Ngunit kung napagtanto ng isang developer na kahit na maliit na pagbabago sa kanyang klase ay magiging sanhi ng lahat na huminto sa paggana gaya ng inaasahan, kung gayon mas mabuting ipagbawal ang mana."

"Halimbawa, ang String class ay idineklara bilang pinal, tulad ng lahat ng primitive na uri: Integer, Boolean, Double, Character…"

"Ah, nakuha ko. Ang String class ay nilikha bilang isang hindi nababagong klase at kung sila ay biglang nababago, kung gayon maraming bagay ang titigil sa paggana."

"Well, almost. Let's put it this way: everything would work almost as before, but sometimes there would be errors that would be very hard to find and understand. So, in some cases, ang pagmamana ng mga klase o pamamaraan ay hindi talaga kasalanan, ngunit ang pagbabawal dito ay nangangahulugan ng mas kaunting mga pagkakamali na mahuhuli sa ibang pagkakataon."

"Saan mo pa magagamit ang final?"

"Maaari mong gamitin ang final before function na mga parameter, at bago ang mga variable sa isang method. Narito ang isang halimbawa:"

public void setName(final String name)
{
 final String displayName = "Mr."+ name;
  …
 this.name = displayName;
}

"At ano ang silbi niyan?"

"Well, may dalawa. Una, idedeklara namin ang isang variable bilang pinal kung gusto naming sabihin sa iba pang mga developer na ang value na ito ay isang partikular na pare-pareho, at hindi isang variable lamang."

Halimbawa, gusto naming kalkulahin ang buwis sa pagbebenta batay sa isang presyo:

public int getPriceNDS()
{
 final int NDS = 20;
 return this.price * NDS / 200;
}

"At pangalawa, kailangan namin ng ganitong uri ng variable kapag nagsusulat ng mga lokal o hindi kilalang panloob na klase. Sasabihin ko sa iyo ang tungkol sa mga ganitong uri ng klase sa lalong madaling panahon. Ngunit hindi ngayon."

"Okay, so far wala pa namang masyadong complicated."

"Pakitandaan na ang variable lamang ang hindi nababago, hindi isang bagay na maaaring tinutukoy nito. Ang bagay ay maaari pa ring baguhin."

"I was actually about to ask about that. And there's no way to make the object unchangeable?"

"Hindi, maliban kung sumulat ka ng isang hindi nababagong klase."

"Pakitandaan na dahil hindi mababago ang halaga ng isang panghuling variable, dapat mong italaga kaagad ang paunang halaga nito."

Ang code na ito ay mag-compile Ang code na ito ay hindi mag-compile
class Home
{
 private final int width = 200;
 private final int height = 100;

 public Home()
 {
 }
}
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
 }
}

"Ngunit, sabi nga, hinahayaan ka ng Java na antalahin ang pagsisimula ng mga huling variable ng klase hanggang sa constructor."

Ang code na ito ay mag-compile Ang code na ito ay hindi mag-compile
class Home
{
 private final int width = 200;
 private final int height;

 public Home()
 {
  height = 100;
 }
}
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
  height = 100;
 }
}

"Bukod pa rito, ang iba't ibang mga constructor ay maaaring magpasimula ng mga huling variable na may iba't ibang mga halaga. Ito ay medyo maginhawa:"

Ang code na ito ay mag-compile
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
  height = 100;
  width = 200;
 }

 public Home(int width)
 {
  this.height = 300;
  this.width = width;
 }

 public Home(int width, int height)
 {
  this.height = height;
  this.width = width;
 }
}

"Iyon ay isang talagang kawili-wiling paksa, at talagang lahat ay may katuturan. Salamat, Bilaabo!"