OOP- Polimorfizm ve Soyut Sınıflar
Polimorfizm: Polimorfizm, aynı isimdeki metotların farklı davranışlar sergilemesine izin veren bir özelliktir. Bu, aynı isimdeki metotların farklı sınıflar tarafından farklı şekilde uygulanabileceği anlamına gelir. Java’da polimorfizmi, miras alma (inheritance) ve arayüzler (interfaces) gibi mekanizmalarla sağlanır.
Soyut Sınıflar: Soyut sınıflar, içlerinde soyut (abstract) metotlar bulunan ve doğrudan örneklenemeyen sınıflardır. Soyut metotlar, alt sınıflar tarafından uygulanmak zorundadır. Bu şekilde, soyut sınıflar genellikle ortak davranışları tanımlar ve alt sınıfların bu davranışları nasıl uygulayacağını belirler.
Örnek
// Soyut sınıf tanımı
abstract class Shape {
// Soyut yöntem tanımı
abstract double area(); // Şeklin alanını hesaplamak için soyut bir yöntem
}
// Üçgen sınıfı, Shape sınıfından türetilmiştir
class Triangle extends Shape {
double base, height; // Üçgenin taban uzunluğu ve yüksekliği
// Constructor (kurucu metod)
Triangle(double base, double height) {
this.base = base;
this.height = height;
}
// Soyut yöntemi uygula
@Override
double area() {
return 0.5 * base * height; // Üçgenin alanını hesapla (0.5 * taban * yükseklik)
}
}
// Kare sınıfı, Shape sınıfından türetilmiştir
class Square extends Shape {
double side; // Karenin kenar uzunluğu
// Constructor (kurucu metod)
Square(double side) {
this.side = side;
}
// Soyut yöntemi uygula
@Override
double area() {
return side * side; // Karenin alanını hesapla (kenar * kenar)
}
}
// Ana sınıf
public class Main {
public static void main(String[] args) {
// Şekilleri oluştur
Shape triangle = new Triangle(4, 5); // Tabanı 4 ve yüksekliği 5 olan bir üçgen oluştur
Shape square = new Square(6); // Kenarı 6 olan bir kare oluştur
// Alanları hesapla ve yazdır
System.out.println("Triangle area: " + triangle.area()); // Üçgenin alanını yazdır
System.out.println("Square area: " + square.area()); // Karenin alanını yazdır
}
}
Örnek
// Soyut sınıf tanımı
abstract class Shape {
// Soyut yöntem tanımı
abstract double area(); // Şeklin alanını hesaplamak için soyut bir yöntem
}
// Daire sınıfı, Shape sınıfından türetilmiştir
class Circle extends Shape {
double radius; // Dairenin yarıçapı
// Constructor (kurucu metod)
Circle(double radius) {
this.radius = radius;
}
// Soyut yöntemi uygula
@Override
double area() {
return Math.PI * radius * radius; // Dairenin alanını hesapla (π * r^2)
}
}
// Dikdörtgen sınıfı, Shape sınıfından türetilmiştir
class Rectangle extends Shape {
double width, height; // Dikdörtgenin genişliği ve yüksekliği
// Constructor (kurucu metod)
Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
// Soyut yöntemi uygula
@Override
double area() {
return width * height; // Dikdörtgenin alanını hesapla (genişlik * yükseklik)
}
}
// Ana sınıf
public class JavaApplication10 {
public static void main(String[] args) {
// Şekilleri oluştur
Shape circle = new Circle(5); // Yarıçapı 5 olan bir daire oluştur
Shape rectangle = new Rectangle(4, 6); // Genişliği 4 ve yüksekliği 6 olan bir dikdörtgen oluştur
// Alanları hesapla ve yazdır
System.out.println("Circle area: " + circle.area()); // Dairenin alanını yazdır
System.out.println("Rectangle area: " + rectangle.area()); // Dikdörtgenin alanını yazdır
}
}