Bu dersimizdee Class Member (instance variable, methods) icin kullanabilecek nonaccess member modifier konusunu isleyecegiz.
final Methods
final anahtar kelimesi metotlar icin kullanildiginda , alt sinif tarafindan bu metodun ezilmesini (override) engeller.
A.java
package purejava5; public class A { void method1() { } final void method2() { } }
B.java
package purejava5; public class B extends A{ @Override void method1(){ } /* void method2(){ }*/ }
B sinifimiz A sinifini extends etmektedir, final olarak tanimlanmayan method1 ezilebilirken, final olarak tanimlanan method2 ezilemektedir.
abstract Methods
abstract metotlar , abstract anahtar kelimesi ile tanimlanan , suslu parantezin olmadigi { } gariban metotlardir sadece tanimlanmistir icerisinde herhangi bir fonksiyonellik yoktur.
abstract metotlar noktali virgul ile son bulurlar,
public abstract void method1();
Yukaridaki kod parcacigi derleme hatasi verecektir, cunku sinifimiz abstract bir metoda sahiptir ve bu sinif abstract olarak tanimlanmamistir.
abstract sinifi extends eden bir sinif , abstract metotlari ezmek (override) zorundadir. Eger extends eden sinif abstract ise ezmek zorunda degildir.
A.java
package purejava5; abstract public class A { final void method1() { } void method2() { System.out.println("Hello Java"); } abstract void method3(); abstract int method4(); } class B extends A { @Override void method3() { } @Override int method4() { return 0; } } abstract class C extends A { @Override void method3(){ System.out.println("Override"); } abstract void method5(); } class D extends C { @Override void method5() { // TODO Auto-generated method stub } @Override int method4() { // TODO Auto-generated method stub return 0; } }
A sinifi abstract olarak tanimlanmistir ve 2 adet abstract metotu vardir.
B sinifi, A sinifini extends ettigi icin ve abstract olarak tanimlanmadigi icin bu 2 abstract metodu override etmek zorundadir.
C sinifi , abstract oldugu icin A sinifini extends etmesine ragmen A sinifinda tanimlanan abstract metotlari override etmek zorunda degildir, fakat dilersek override edebiliriz.
C sinifininda bir adet abstract metot tanimlanmistir.
D sinifi C sinifini extends ettiginde, C sinifinin abstract metodunu override etmek zorundadir bununla birlikte C sinifinin A sinifindan kalittigi ve override etmedigi method4 ,D sinifinda override edilmek zorundadir.
Genel kural sudur, abstract olarak tanimlanan bir metot , abstract olarak tanimlanmayan ilk sinifta mutlaka override edilmelidir.
synchronized Methods
synchronized olarak tanimlanan bir metoda ayni anda sadece bir tek adet thread erisebilir. Ilerleyen derslerde synchronized konusunu isleyecegim , burada konumuz belirtecler oldugu icin detaya girmeyecegim.
synchronized anahtar kelimesi sadece metotlar icin kullanilabilir, degiskenler veya siniflar icin tanimlanamazlar.
native Methods
native , Java ‘ da anahtar kelimedir ve sadece metotlar icin kullanilabilir. Degiskenler ve siniflar icin kullanilamazlar. Javada , C kodlarini cagirip kullanabiliriz.
native metotlar abstract metotlar gibi govdesiz olarak tanimlanir.
strictfp Methods
strictfp belirtecini siniflar icin kullanmistik, bu belirtec metotlar icin de kullanilabilir. Bir sinifi strictfp olarak tanimlayabildigimiz gibi metotlari da bireysel olarak tanimlayabiliriz. Floating islemlerin IEEE 754 standardina uygun olmasini saglar.