Java Hızlı Başlangıç Rehberi
Daha önce Java geliştirme ortamını nasıl oluşturacağınız ile ilgili basit bir anlatımı buradaki yazımda paylaşmıştım. Şimdi ise Java için bir hızlı başlangıç rehberi olması amacıyla bu yazıyı yazıyorum. Burada paylaşacaklarım farklı bir yazılım diline hakim ancak Java konusunda bilgisi olmayan kişilere yönelik olacağından temel yazılım bilgisi şarttır.
Java syntax'ı (söz dizimi) diğer yazılım dilleri arasından C++'a benzemektedir. Yazılıma yeni başlayan birisi için genellikle başlangıç dili olarak önerilmiyor. Yine de gözünüzü korkutmasın. Python kadar öğrenilmesi basit olmasa da C dilleri kadar karmaşık da değildir.
Yazım ve İsimlendirme Kuralları
Tüm yazılım dillerinde olduğu gibi Java'nın da yazım ve isimlendirme kuralları vardır. Bu kuralların çoğu neredeyse tüm yazılım dillerinde zaten geçerlidir.
- Türkçe Karakter Sorunsalı; şimdiye kadar zaten Türkçe karakterlerin kullanılabildiği bir yazılım diline rastlamadım. Tüm yazılım dillerinde olduğu gibi Java, 27 karakterden oluşan Latin (İngiliz) alfabesini kullanır.
- Büyük/Küçük Harf Duyarlılığı; Java büyük ve küçük harfe duyarlıdır. Java'da "Lifeacode" ile "lifeacode" farklı şeylerdir.
- Java'nın Anahtar Kelimeleri; her yazılım dilinde olduğu gibi Java'nın da kullandığı belli başlı kelimeler vardır. Bir sınıf, metot, değişken ya da sabit adı belirtirken bu anahtar kelimeleri kullanamazsınız. Bu anahtar kelimeleri birazdan paylaşacağım.
Sınıf (Class) İsimlendirmeleri
Java'da sınıf isimleri dosya isimleri ile aynı olmalıdır.
Standartlara uymak ve okunabilirliği arttırmak için sınıf adının ilk harfi büyük yazılmalıdır. Sınıf adı iki kelimeden oluşacaksa; kelimeler bitişik ve her kelimenin ilk harfi büyük karakterle yazılmalıdır. Örneğin; "CamelCase" gibi.
Metot ve Değişken İsimlendirmeleri
Metot isimleri küçük harfle başlamalı ve küçük harflerle devam etmelidir. Birden fazla kelimenin bir araya getirilmesiyle oluşacaksa ilk kelimenin baş harfi küçük, diğer kelimelerin sadece baş harfleri büyük şekilde yazılmalıdır. Örneğin; "camelCase" gibi. Değişkenlerde metotlarla aynı şekilde isimlendirilmelidir.
Sabit İsimlendirmeleri
Sabit isimlerinin tüm karakterleri büyük harflerle yazılmalıdır. Birden fazla kelimeden oluşan isimlendirmeler "_" ile ayrılmalıdır. Örneğin; "CAMEL_CASE" gibi.
Identifier İsimlendirmeleri
Büyük ve küçük (A-Z ve a-z) harflerin yanı sıra "$" veya "_" karakteri ile başlayabilir.
JAVA Keywords (Anahtar Kelimeler)
Java dillerinde özel bir anlamı olan kelimeleri aşağıdaki tabloda görebilirsiniz.
| abstract | assert | boolean | break | byte |
| case | catch | char | class | const |
| continue | default | do | double | else |
| enum | extends | final | finally | float |
| for | goto | if | implements | import |
| instanceof | int | interface | long | native |
| new | package | private | protected | public |
| return | short | static | strictfp | super |
| switch | synchronized | this | throw | throws |
| transient | try | void | volatile | while |
Main Metodu ve Kullanımı
Bir Java yazılımı yürütülmeye başlandığında sınıf içerisindeki main metodu çalıştırılır. Bu yüzden main metodu bulunması zorunludur.
HelloWorld.java dosyası örneği;
public class HelloWorld{
public static void main(String[] args) {
System.out.print("Hello World!");
}
}
Veri Tipleri
| Anahtar Kelime | Açıklama |
| byte | 8bit yani 1 byte uzunluğundadır. 127 ile -128 arasında bir tam sayı. |
| short | 16 bit uzunluğundadır. 32767 ile -32768 arasında bir tam sayı. |
| int | 32 bit uzunluğundadır. 2147483647 ile -2147483648 arasında bir tam sayı. |
| long | 64 bit uzunluğundadır. 9223372036845775807 ile -9223372036845775808 arasında bir tam sayı. |
| float | 32bit boyutundadır. 1.4x10-45 ile 3.4x1038 arasında bir ondalık sayı. |
| double | 64bit boyutundadır. 4.9x10-324 ile 1.8x10308 arasında bir ondalık sayı. |
| char | 16bit boyutundadır. Tek bir karakter. Unicode karakter setini kullandığından tüm Dünya dillerini kapsar. |
| boolean | Mantıksal değeri ifade eder. (True ya da False) |
| String | String tam olarak bir veri tipi değildir. Java tarafından "char" tipinden türetilmiş bir sınıf ile desteklenir. Birden fazla karakterlerin bütününü ifade eder. |
Değişken (Variable)
Java'da bir değişken oluşturmak PHP ve Python'dan farklıdır. C dilleri gibi değişkenin türünün (veri tipi) belirtilmelidir. Örneğin;
int x = 13;
Tam sayı türünde x adındaki değişkene 13 değerini atadık. Tanımlama işlemi ile atama işlemi farklı satırlarda yapılabilir. Örneğin;
int x; x = 13;
Aynı türdeki değişkenleri tek satırda tanımlamakta mümkündür. Örneğin;
int x, y; x = 12; y = 15;
Java'da Operatörler
Java'da operatörlerin kullanım şekli diğer yazılım dilleri ile benzer şekildedir.
Atama Operatörleri
| Operatör | Açıklama | Örnek |
= | Solundaki değere sağındaki değeri atar. | x=y+z; y ve z toplanarak sonuç x'e atanır. |
+= | Solundaki değer sağındaki değer ile toplanarak solundaki değere atanır. | x+=y; ilex=x+y; aynı şeyi ifade eder. |
-= | Solundaki değerden sağındaki değeri çıkarır ve sonucu solundaki değere atar. | x-=y; ilex=x-y; aynı şeyi ifade eder. |
*= | Solundaki değerle sağındaki değeri çarpar ve sonucu solundaki değere atar. | x*=y; ilex=x*y; aynı şeyi ifade eder. |
/= | Solundaki değeri sağındaki değere bölerek sonucu solundaki değere atar. | x/=y; ilex=x/y; aynı şeyi ifade eder. |
%= | Solundaki değerin sağındaki değere modunu alıp solundaki değere atar. | x%=y; ile x=x%y; aynı şeyi ifade eder. |
Aritmatik Operatörler
| Operatör | Açıklama | Örnek |
+ | Sağındaki ve solundaki değerler sayısal ise toplar. Değerlerden birisi string türünde ise ekler. Sağındaki değerin sonrasına bir string ifade olarak ekleme yapar. | 4+3; 7 sonucunu verirken;4+"3"; 43 sonucunu verir. |
- | Solundaki değerden sağındaki değeri çıkarır. | x-y; |
* | Solundaki ve sağındaki değerleri çarpar. | x*y; |
/ | Solundaki değeri solundaki değere böler. | x/y; |
% | Solundaki değerin sağındaki değere göre modunu alır. | 15%4; 3 verir. |
++ | Değeri 1 arttırır. | x++; |
-- | Değeri 1 azaltır. | x--; |
İlişkisel Operatörler (Koşul Operatörleri)
| Operatör | Açıklama | Örnek |
== | Sağındaki ve solundaki değerlerini birbirlerine eşitlik durumunu sorgular. | x==y |
!= | Sağındaki ve solundaki değerlerin eşit olmama durumunu sorgular. | x!=y |
> | Solundaki değerin sağındaki değerden büyüklük durumu sorgular. | x>y |
< | Solundaki değerin sağındaki değerden küçüklük durumunu sorgular. | x<y |
>= | Solundaki değerin sağındaki değerden büyük veya eşit olma durumunu sorgular. | x>=y |
<= | Solundaki değerin sağındaki değerden küçük veya eşit olma durumunu sorgular. | x<=y |
Mantıksal Operatörler
| Operatör | Açıklama | Örnek |
&& | VE; her iki tarafındaki durumun doğru yani true olması beklenir. | x&&y |
|| | VEYA; her iki tarafındaki durumlardan en az birinin doğru yani true olması beklenir. | x||y |
! | DEĞİL; Önüne geldiği durumun yanlış (false) olması durumunda true yani doğru olur. | !(x&&y) |
Java'da Input ve Output
Bir yazılım dilinde elbette kullanıcıdan bazı verileri almak ve bu verileri işleyerek belli bir çıktı üreterek bunu kullanıcıya çıktılamak gerekir. Bu işin doğasında olan birşey.
Ekrana bir çıktı üretmek için;
System.out.print("Hello World");
Çıktıdan sonra imlecin alt satırdan devam etmesi için "\n" kullanabilirsiniz ancak bunun daha kolay okunabilir bir yolu println metodunu kullanmaktır.
System.out.println("Hello World");
Kullanıcıdan bir veri almak için Java kütüphanelerinden birine ihtiyacınız var. Kullanıcıdan bir giriş yapmasını istecekseniz java.util.Scanner dahil edilmelidir.
import java.util.Scanner;
public class IfElse {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Lütfen bir tam sayı giriniz.");
int x = input.nextInt();
System.out.println("Girdiğiniz sayı : " + x);
}
}
Yukarıdaki örnekte kullanıcıdan bir tam sayı alıyoruz. Ancak her veri türü için Scanner kütüphanesinden farklı bir metot kullanmanız gerekiyor.
| Veri Türü | Scanner Metodu |
| byte | nextByte |
| short | nextShort |
| int | nextInt |
| long | nextLong |
| float | nextFloat |
| double | nextDouble |
| boolean | nextBoolean |
String türünde veri almanız gerekiyorsa; kullanabileceğiniz iki metot bulunuyor.
| Scanner Metot | Açıklama |
| next | Kullanıcının girdiği metinden ilk kelimeyi alır. |
| nextLine | Kullanıcının girdiği tüm satırı alır. |
Java'da Koşullu İfadeler
(İf/Else & Switch/Case)
public class IfElse {
public static void main(String[] args) {
int x = 14;
if((x%2) == 0) {
System.out.println(x + " çift sayıdır.");
}else {
System.out.println(x + " çift sayı değildir.");
}
}
}
Farklı bir yazım şekli olarak aşağıdaki şekilde de bu koşul kontrol edilebilirdi.
public class IfElse {
public static void main(String[] args) {
int x = 15;
String msg = (x%2 == 0) ? "çift sayıdır." : "çift sayı değildir!";
System.out.println(x + " " + msg);
}
}
aynı koşulun Switch/Case ile yazımı ise şu şekildedir;
public class SwitchCase{
public static void main(String[] args) {
int x = 15;
switch(x%2) {
case 0:
System.out.println(x + " çift sayıdır.");
break;
default: System.out.println(x + " çift sayı değildir.");
}
}
}
Java'da Diziler (Array)
int[] a = {3,4,5,6,7};
ya da
int a[] = {3,4,5,6,7};
bununla birlikte şöyle bir kullanımda mümkündür.
int rakamlar[] = new int[10]; rakamlar[0] = 0; rakamlar[1] = 1; rakamlar[2] = 2; rakamlar[3] = 3; rakamlar[4] = 4; rakamlar[5] = 5; rakamlar[6] = 6; rakamlar[7] = 7; rakamlar[8] = 8; rakamlar[9] = 9;
rakamlar adında bir dizi oluşturdum ve tam sayılardan oluşan 10 elemanı olduğunu bildirdim daha sonra indexlerini köşeli parantez içinde belirtiğim her bir elaman için atama işlemini gerçekleştirdim.
length
Bir dizinin kaç elemanı olduğunu bulmak için kullanılır.
public class Diziler {
public static void main(String[] args) {
int rakamlar[] = {0,1,2,3,4,5,6,7,8,9};
System.out.println("Dizide " + rakamlar.length + " eleman var.");
}
}
Çoklu Diziler
Çoklu diziler ya da başka bir tabirle iç içe dizilerde diyebiliriz. Bir dizinin içerisindeki elemanların da dizi olma durumu.
int[][] dizi = new int[][] {
{1,3,5,7,9},
{2,4,6,8,10}
};
çoklu dizilerde de köşeli parantezler içinde indexini yazarak tanımlama yapmak, değere ulaşmak ya da değeri değiştirmek mümkündür.
int[][] dizi = new int[2][5]; dizi[0][0] = 1; dizi[0][1] = 3; dizi[0][2] = 5; dizi[0][3] = 7; dizi[0][4] = 9; dizi[1][0] = 2; dizi[1][1] = 4; dizi[1][2] = 6; dizi[1][3] = 8; dizi[1][4] = 10;
Java'da Döngüler (Loops)
Java'da döngüler C dillerindeki ile birebir aynı şekilde çalışıyor diyebilirim. Anlayabilmeniz için aşağıda her döngü çeşidine basit birer örnek verdim.
While Döngüsü
int x = 5;
while(x >= 1) {
System.out.println(x);
x--;
}
Do-While Döngüsü
int x = 5;
do{
System.out.println(x);
x--;
}while(x >= 6);
For Döngüsü
for(int i = 1; i <= 5; i++) {
System.out.println(i);
}
Foreach Döngüsü
For döngüsünün (array) dizilerde kullanılabilen halidir. Daha kolay yazım ve okuma amacı taşır. Aynı işlemi for döngüsü ile de yapabilirsiniz.
public class Diziler {
public static void main(String[] args) {
int[] dizi = {1,3,5,7,9};
for(int value: dizi){
System.out.println(value);
}
}
}
Çoklu dizilerde ise kullanımı şu şekilde oluyor;
public class Diziler {
public static void main(String[] args) {
int[][] dizi = new int[][] {
{1,3,5,7,9},
{2,4,6,8,10}
};
for(int[] row: dizi){
for(int value: row) {
System.out.println(value);
}
}
}
}
break
Döngülerin sonlandırılması için break anahtar sözcüğü kullanılır.
import java.util.Scanner;
public class LoopsBreak{
public static void main(String[] args) {
Scanner giris = new Scanner(System.in);
int i;
System.out.println("Lütfen bir çift sayı giriniz.");
while(true){
i = giris.nextInt();
if((i%2) == 0) {
System.out.println("Tebrikler, " + i + " bir çift sayıdır.");
break;
}else {
System.out.println(i + " bir tek sayıdır.");
}
System.out.println("Lütfen bir çift sayı giriniz.");
}
}
}
Yukarıdaki örnekte kullanıcı çift sayı girene kadar devam eden bir döngü, kullanıcı her hangi bir çift sayı girmesi ile break; komutuyla döngüyü sonlandırıp bitirecektir.
continue
continue anahtar sözcüğü döngü içerisinde kendisinden sonra gelen kodları yok sayarak döngünün sonraki turundan devam etmesini sağlar.
public class LoopsContinue{
public static void main(String[] args) {
int i = 10;
while(i >= 1) {
i--;
if(i <= 5 && i >= 3) {
continue;
}
System.out.println(i);
}
}
}
Java'da Metotlar
Java çoğu programlama dilinin aksine tamamen nesne yönelimlidir. PHP, Python ve C dillerinin aksine Java da fonksiyonlar metotlar olarak yazılır. Yazım şekli syntax'ı C dillerine benzer.
Aldığı iki parametreyi toplayıp sonucu ekrana basan basit bir metot örneği;
public class Metot{
public static void main(String[] args) {
int a = 5, b = 4;
topla(a, b);
}
static void topla(int x, int y) {
System.out.println(x + y);
}
}
Metot bir veri döndürmediği "return" etmediği için metodu tanımlarken void sözcüğünü kullanıyoruz. Toplama işlemini ekrana basmak yerine döndüren bir metotta ise döndürdüğü verinin türü belirtilmelidir.
public class IfElse{
public static void main(String[] args) {
int a = 5, b = 4;
System.out.println(topla(a, b));
}
static int topla(int x, int y) {
int toplam = x + y;
return toplam;
}
}
Overloading
Java'da metotların farklı kullanımlar için ayrı ayrı özel olarak tanımlanması gerekiyor. Buna aşırı yüklenme yani overloading deniyor.
public class Overloading {
public static void main(String[] args) {
System.out.println(topla(3, 5));
System.out.println(topla(3, 5, 8));
System.out.println(topla(3, 5, 6.5));
}
static int topla(int x, int y) {
return x + y;
}
static int topla(int x, int y, int z) {
return x + y + z;
}
static double topla(int x, int y, double z) {
return x + y + z;
}
}
Java'da Sınıf (Class)
SinifAdi.java
public class SinifAdi {
public int a;
int d; //protected
protected int b;
private int c;
public int topla(int x) {
return x + a;
}
}
Proje.java
public class Proje {
public static void main(String[] args) {
SinifAdi sinif1 = new SinifAdi();
sinif1.a=5;
System.out.println(sinif1.topla(10));
}
}
Constructor (Yapıcı) Metot
Sınıflar başlatılır başlatılmaz çalıştırılacak olan metottur. Sınıf adı ile aynı isimde olmak zorundadır.
Kullanici.java
public class Kullanici {
public String name;
public String surname;
Kullanici(String name, String sname){
this.name = name;
surname = sname;
}
public String adiniSoyle() {
return name + " " + surname;
}
}
Proje.java
public class Proje {
public static void main(String[] args) {
Kullanici user = new Kullanici("Muhammet", "Şafak");
System.out.println(user.adiniSoyle());
}
}
Yapıcı metotlarda overloading işlemi sıradan metotlarla aynı şekilde yapılmaktadır.
Static
Statik olarak tanımlanan özellikler (property) ve metotlar nesnelerden bağımsız olarak çalışır. Nesneye değil, sınıfın kendisine ait olan tanımlamaları yapmakta kullanılır.
Kullanici.java
public class Kullanici {
public String name;
public String surname;
private static int count = 0;
Kullanici(String name, String sname){
this.name = name;
surname = sname;
Kullanici.count++;
}
public String adiniSoyle() {
return name + " " + surname;
}
public int kacKullaniciVar() {
return Kullanici.count;
}
}
Proje.java
public class Proje {
public static void main(String[] args) {
Kullanici user1 = new Kullanici("Muhammet", "Şafak");
Kullanici user2 = new Kullanici("Ömer", "Şafak");
System.out.println(user1.kacKullaniciVar());
}
}
Fark edebileceğiniz gibi Kullanıcı sınıfı altında statik olarak belirlenmiş count özelliğine this.count yerine Kullanici.count şeklinde erişim sağladım.
Final (Sabit)
Java'da final sözcüğü bir sabit tanımlamak için kullanılır.
final double PI = 3.14;
Sınıf içerisinde static bir sabit olarak tanımlamak dışarıdan da bu değere erişmeye imkan verir.
Matematik.java
public class Matematik {
final static double PI = 3.14;
}
Proje.java
public class Proje {
System.out.println(Matematik.PI);
}
Encapsulation (Sarmallama ya da Kapsülleme)
Temel olarak sınıfa ait özelliklere doğrudan erişimi engellemek bunun yerine gerekli kontrollerin yapıldığı metotlar aracılığı ile özelliklere erişimi sağlama işine verilen isimdir.
Book.java
public class Book {
private String name, author;
private int numberOfPage;
Book(String name, String author, int numberOfPage){
this.name = name;
this.author = author;
setPageSize(numberOfPage);
}
public String getName() {
return this.name;
}
public String getAuthor() {
return this.author;
}
public int getPageSize() {
return this.numberOfPage;
}
public void setPageSize(int pageSize) {
if(pageSize < 1) {
this.numberOfPage = 1;
}else {
this.numberOfPage = pageSize;
}
}
}
Yukarıdaki örnekte görebileceğiniz gibi özelliklere dışarıdan erişime izin verilmiyor. Sayfa sayısı güncellenmek istendiğinde gerekli kontrolleri sağlayıp yapacak bir metoda sahip.
Dependency (Bağımlılık) "uses a"
Bir sınıf içerisinde başka bir sınıfa ait bir özellik (property) yada metot kullanılmasıyla gerçekleşen durumdur.
A.java
public class A{
public void run(B b){
System.out.println(b.ozellik);
}
}
B.java
public class B{
public int ozellik = 5;
}
Proje.java
public class Proje{
public static void main(String[] args){
A a = new A();
B b = new B();
a.run(b);
}
}
A sınıfının run metodunda görebileceğiniz gibi metot olarak B türünde bir parametre alması gerekiyor. Bu A sınıfının B sınıfına bağımlı olduğunu gösterir. Yani B sınıfı olmadan A sınıfı çalışamayacaktır.
Composition (Birleştirme) "has a"
Birleştirme bir sınıf içerisinde farklı bir sınıfın türünde özellik tanımlama işlemi ile oluşan duruma verilen isimdir. Yine aynı örnek üzerinden anlatacak olursam.
A.java
public class A{
public B degisken;
}
B.java
public class B{
public int ozellik = 5;
}
Proje.java
public class Proje{
public static void main(String[] args){
A a = new A();
B b = new B();
a.degisken = b;
}
}
Görebileceğiniz gibi A sınıfı içerisindeki degisken isimli özellik B sınıf türünde değer almalıdır.
Inheritance (Kalıtım) "is a"
Ortak özellikleri ve ortak metotları kullanması gereken sınıfların bu sınıfları bünyelerine katması olarak tanımlayabiliriz. Temelde her sınıf için aynı özellik ve metotları yazmaktan kurtulursunuz ayrıca bir sorun çıktığında tek bir yere müdahale etmeniz gerektiğinden geliştirme işini oldukça kolaylaştıran yapıdır.
extends tanımı hangi sınıfın miras alınacağını bildirir.
Human.java
public class Human {
public String name;
public int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}
Teacher.java
public class Teacher extends Human{
public String branch;
Teacher(String name, int age, String branch){
setName(name);
setAge(age);
this.branch = branch;
}
public void teacherInfo() {
System.out.println(getName() + " bir " + branch + " öğretmenidir.");
}
}
Student.java
public class Student extends Human {
public int number;
public String classroom;
Student(String name, int age, int number, String classroom){
setName(name);
setAge(age);
this.number = number;
this.classroom = classroom;
}
public void studentInfo() {
System.out.println(number + " " + getName() + " " + classroom + " sınıfından bir öğrencidir.");
}
}
Main.java
public class Main {
public static void main(String[] args) {
Student ogrenci = new Student("Ali Kuşlukçu", 17, 257, "11D");
Teacher ogretmen = new Teacher("Selim Güngören", 29, "Edebiyat");
ogrenci.studentInfo();
System.out.println(ogrenci.getAge() + " yaşındadır.");
ogretmen.teacherInfo();
System.out.println(ogretmen.getAge() + " yaşındadır.");
}
}
super
Miras aldığınız (extends ettiğiniz) bir sınıf yapıcı bir metoda sahip olabilir. super anahtar kelimesi miras alınan sınıfın yapıcı metodunu çalıştırmak için kullanılır.
A.java
public class A{
public int x;
A(int x){
this.x = x;
}
}
B.java
public class B extends A{
public int y;
B(int y, int x){
this.y = y;
super(x)
}
}
Metot Overriding (Metot Ezme)
Bir sınıf içerisinde miras aldığı sınıf ile aynı isimde bir metot varsa; miras aldığı sınıfta ki metodu ezer. Yani o isimle metot çağrıldığında miras alınan sınıfın değil, çalıştırılan sınıfın metodu çalışır.
Polymorphism (Çok Biçimlilik)
Bir sınıf başlatılacağı zaman; referans olarak kendisinin extends ettiği sınıf referans olarak gösterilebilir.
Human.java
public class Human {
public String name;
public int age;
Human(String name, int age){
this.name = name;
this.age = age;
}
public void info() {
System.out.println(this.name + " " + this.age + " yaşındadır.");
}
public String getName() {
return this.name;
}
}
Student.java
public class Student extends Human {
public int number;
public String classroom;
Student(String name, int age, int number, String classroom){
super(name, age);
this.number = number;
this.classroom = classroom;
}
public void info() {
System.out.println(number + " " + getName() + " " + classroom + " sınıfından bir öğrencidir.");
}
}
Main.java
public class Main {
public static void main(String[] args) {
Human ogrenci = new Student("Ali Kuşlukçu", 17, 257, "11D");
ogrenci.info();
}
}
Görebileceğiniz Main.java dosyasında ogrenci değişkenine Referans olarak Human sınıfını göstermiş olsam da Student isimli sınıfı başlattım. Bunu yapabilmek için Student sınıfının Human sınıfını miras almış olması gereklidir.
Abstraction (Soyutlama)
Nesne yönelimli programlama yaparken bazı durumlarda bir nesne oluşturmayacağınız sınıflar yazmanız gerekebilir.

Örneğin yukarıdaki diyagramdaki yapıyı kurmak istersek; Akademisyen sınıfı kullanılarak programın hiçbir yerinde bir nesne oluşturulmayacaktır. Çünkü Asistan ya da Ogretmen sınıfları dışında herhangi bir asistan nesnesi olamaz.
Bir nesne oluşturulmayacağı halde bir sınıf oluşturup soyutlamak aslında kendisini miras alan sınıfların bulundurması gereken özellik ve metotları tanımlar.
Bir sınıfı ve metodu soyutlamak için abstract ifadesi kullanılır.
Akademisyen.java
public abstract class Akademisyen {
String bolum, gorev, dersler;
public abstract void derseGir();
}
Akademisyen metodunu miras alan sınıflar da derseGir() metodu tanımlandığı şekilde olmak zorunda. Verdiğim örnekte soyutlanmış derseGir() metodu bir şey döndürmeyecek ve parametre almıyor diye tanımladığıma dikkat edin. Bu sınıfı miras alan sınıf da derseGir() metodunu soyutlanmış metot ile aynı şekilde çalıştırmak zorundadır. Bu metot bir şey döndürecek ya da parametreler alacaksa bu soyutlanmış metotta belirtilmelidir.
Interface (Arayüz)
Arayüzler tıpkı abstract sınıflara benzer şekilde belli bir kalıp belirtilmesinde kullanılır.
- Arayüzler
interfaceifadesi ile tanımlanır. - Arayüz içerisinde bir özellik (property) tanımlanamaz ancak
finalifadesi kullanılarak değişmez özellik tanımlanabilir. - Arayüzler miras alınmaz, uygulanır. Bir sınıfa bir arayüzü uygulamak için
implementsifadesi kullanılır.
Calisan.java
public interface Calisan {
final String okul = "ITU";
public void giris();
public void cikis();
public boolean yemek(int saat);
}
Akademisyen.java
public abstract class Akademisyen implements Calisan {
String bolum, gorev, dersler;
public abstract void derseGir();
public void giris() {}
public void cikis() {}
public boolean yemek(int saat) {
if(saat <= 13 && saat >= 12) {
System.out.println("Yemek yeniyor.");
return true;
}else {
System.out.println("Mutfak ve kafeterya kapandı.");
return false;
}
}
}
Bu içerik buraya kadardı. Ancak Java bu kadarla kısıtlı değil, bu yüzden temel konuların dışındaki konuları Java Dersleri sayfasından takip edebilirsiniz.
Yazar
Muhammet Şafak
Yazılım Mühendisi & Full-Stack Geliştirici. PHP, Laravel ve modern web teknolojileri üzerine yazıyor.
HakkımdaYorumlar 0
Henüz yorum yapılmamış.
İlk yorumu siz yapın!
Yorum Yaz
Yorumunuz moderasyon sonrası yayınlanacaktır.