Java'daki Soyut sınıf, doğrudan başlatılamayan bir sınıftır. Bunun amacı, diğer sınıfların miras alınabileceği ve genişletilebileceği bir temel sınıf görevi görmektir. Soyut bir sınıfın önemli özelliklerinden biri, özel yöntemler olarak bilinen ve bir sınıfın nesnesi oluşturulduğunda çağrılan yapıcıları tanımlama yeteneğine sahip olmasıdır.
Soyut bir sınıfta yapıcıları tanımlarken uyulması gereken kurallar:
- Soyut sınıfların yapıcıları olabilir ancak doğrudan örneklenemezler. Yapıcılar somut bir alt sınıf oluşturulduğunda kullanılır.
- Soyut bir sınıfta bir veya daha fazla soyut yöntem bulunabilir; bu, bu yöntemlerin sınıf aracılığıyla uygulanmadığını gösterir. Örneklenebilmesi için, soyut bir sınıfı soyut yöntemlerle genişleten bir alt sınıfın, yöntemleri uygulaması gerekir. Bu, eğer bir alt sınıfın somut bir sınıf olması ve somutlaştırılabilmesi gerekiyorsa, soyut bir sınıf içinde bildirilen her soyut yöntemin bir uygulamaya sahip olması gerektiği anlamına gelir. Başka bir deyişle, soyut sınıfın açık bıraktığı işlevsellik, alt sınıf tarafından doldurulmalıdır.
- Bir alt sınıf soyut bir sınıfı yapıcılarla genişlettiğinde, alt sınıfın süper anahtar kelime yardımıyla üst sınıfın içindeki yapıcılardan birini çağırması gerekir. Çünkü üst sınıf yapıcı, nesnenin durumunu başlatır ve tüm hayati kaynakları birleştirir. Alt sınıf artık üst sınıftaki yapıcılardan birini çağırmazsa, nesne iyi bir şekilde başlatılmayacak ve artık verimli/doğru şekilde çalışmayacaktır.
- Soyut bir sınıfta, diğer sınıflara benzer şekilde birden fazla kurucu tanımlamak mümkündür. Ancak her kurucunun farklı bir parametre listesiyle tanımlanması gerekir. Alt sınıfların özel ihtiyaçlarına göre hangi kurucunun çağrılacağını seçmesine olanak tanır.
Soyut Sınıf kullanılarak uygulanan Yapıcı Türleri:
Üç tür yapıcı vardır, bunlar:
- Varsayılan Yapıcı
- Parametreli Oluşturucu
- Oluşturucuyu Kopyala
1. Varsayılan Yapıcı: Sınıfta başka bir kurucu tanımlanmadıysa yapıcı Java aracılığıyla otomatik olarak oluşturulur. Hiçbir parametresi yoktur ve sınıf alanları için varsayılan değerleri başlatmak dışında herhangi bir hareket gerçekleştirmez.
ALGORİTMA:
Aşama 1: 'Shape' adında soyut bir sınıf tanımlayın.
Adım 2: İki tamsayı değişkeni 'x' ve 'y' korumalı olarak bildirin.
Aşama 3: Bir Shape sınıfı varsayılan yapıcısı oluşturun ve 'x' ve 'y'yi 0 olarak ayarlayın.
Adım 4: Şimdi bir 'getArea()' yöntemi oluşturun, bu çift değer döndürecek soyut bir yöntemdir
Adım 5: Daha sonra Shape sınıfına ait olan 'printPosition()' ve 'setPosition(int x, int y)' olmak üzere soyut olmayan iki yöntem oluşturun.
Adım 6: setPosition yöntemi x ve y değerlerini ayarlar.
Adım 7: PrintPosition yöntemi x ve y değerlerini yazdırır.
java dizeleri
Adım 8: Shape sınıfını genişleten bir Circle sınıfı tanımlayın.
Adım 9: Circle sınıfında 'yarıçap' adlı bir çift değişkeni korumalı olarak bildirin.
Adım 10: Circle sınıfı için, yarıçap için double değerini kabul eden bir kurucu tanımlayın.
Adım 11: Dairenin alanını hesaplayan Circle sınıfı için getArea yöntemini uygulayın.
Adım 1/2: Shape sınıfını genişleten bir Square sınıfı tanımlayın.
Adım 13: Square sınıfında 'side' adında bir double değişkeni korumalı olarak bildirin.
Adım 14: Square sınıfı için, taraf için double değerini kabul eden bir kurucu tanımlayın.
Adım 15: Karenin alanını hesaplayan Square sınıfı için getArea yöntemini uygulayın.
Adım 16: Bir Ana sınıf tanımlayın.
Adım 17: Ana sınıfta ana işlevi tanımlayın.
Adım 18: Bir Circle nesnesi ve bir Square nesnesi oluşturun.
Adım 19: Hem Circle hem de Square nesneleri için setPosition yöntemini çağırın.
Adım 20: Hem Circle hem de Square nesneleri için getArea yöntemini çağırın ve sonuçları yazdırın.
Adım 21: Hem Circle hem de Square nesneleri için printPosition yöntemini çağırın ve sonuçları yazdırın.
Uygulama:
İşte yukarıdaki adımların uygulanması
Dosya adı: VarsayılanMain.java
import java.util.*; abstract class Shape { protected int x; protected int y; // default constructor public Shape() { // initialize default values for fields x = 0; y = 0; } // abstract method to calculate area public abstract double getArea(); // other methods public void setPosition(int x,int y) { this.x=x; this.y=y; } public void printPosition() { System.out.println('The Position: ('+x + ', '+ y +')'); } } class Circle extends Shape { protected double radius; // constructor public Circle(double radius) { this.radius=radius; } // implementation of getArea() for Circle public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { protected double side; // constructor public Square(double side) { this.side = side; } // implementation of getArea() for Square public double getArea() { return side * side; } } public class DefaultMain { public static void main(String args []) { // create a Circle object Circle circle = new Circle(5); circle.setPosition(2,3); // print the area and position of the Circle object System.out.println('Area of a circle is: '+circle.getArea()); circle.printPosition(); // create a Square object Square square = new Square(4); square.setPosition(5, 7); // print the area and position of the Square object System.out.println('Area of a square is: '+square.getArea()); square.printPosition(); } }
Çıktı:
rohit shetty aktör
Area of a circle is: 78.53981633974483 The Position:(2, 3) Area of a square is: 16.0 The Position:(5, 7)
2. Parametreli Yapıcı: Bir nesne oluştururken bu tür bir kurucu, ona argümanlar aktarmanıza olanak tanır. Nesneyi değerlerle başlatmak istediğinizde bu faydalıdır. Parametreli yapıcı bir veya ekstra parametrelerle tanımlanır ve bir nesne yaratılırken yapıcıya iletilen değerler öğenin karşılık gelen alanlarını başlatmak için kullanılır.
ALGORİTMA:
Aşama 1: Soyut bir sınıf şekli tanımlayın.
Adım 2: int türünde x ve y adlı iki korumalı örnek değişkeni ekleyin.
Aşama 3: X ve y örnek değişkenlerini başlatan ve int, x ve y türünde iki parametreyi kabul eden parametreli bir kurucu oluşturun.
Adım 4: Soyut bir sınıf şekli tanımlayın.
Adım 5: int türünde x ve y adlı iki korumalı örnek değişkeni ekleyin.
Adım 6: X ve y örnek değişkenlerini başlatan ve int, x ve y türünde iki parametreyi kabul eden parametreli bir kurucu oluşturun.
Adım 7: Shape'i genişleten bir Circle sınıfı tanımlayın.
Adım 8: Yarıçap adlı double türünde korumalı bir örnek değişken ekleyin.
Adım 9: int x, y ve double radius türünde üç parametre alan ve super() anahtar sözcüğünü kullanarak x, y ve radius örnek değişkenlerini başlatan parametreli bir kurucu tanımlayın.
Adım 10: Çemberin alanını hesaplayarak getArea() soyut yöntemini uygulayın.
Adım 11: Shape'i genişleten bir Square sınıfı tanımlayın.
Adım 1/2: Side adında double türünde korumalı bir örnek değişken ekleyin.
Adım 13: int x, y ve double side tipinde üç parametre alan ve super() anahtar sözcüğünü kullanarak x, y ve side örnek değişkenlerini başlatan parametreli bir kurucu tanımlayın.
Adım 14: Karenin alanını hesaplayarak getArea() soyut yöntemini uygulayın.
Adım 15: Ana sınıfı tanımlayın.
Adım 16: Programın giriş noktası olan main() adında statik bir yöntem tanımlayın.
Adım 17: Parametreli yapıcıyı kullanarak bir Circle nesnesi oluşturun.
Adım 18: Sırasıyla getArea() ve printPosition() yöntemlerini kullanarak Circle nesnesinin alanını ve konumunu yazdırın.
Adım 19: Parametreli yapıcıyı kullanarak bir Square nesnesi oluşturun.
Adım 20: Sırasıyla getArea() ve printPosition() yöntemlerini kullanarak Square nesnesinin alanını ve konumunu yazdırın.
sql sunucusu pivotu
Adım 21: Programın sonu.
Uygulama:
Aşağıda belirtilen yukarıdaki adımların uygulanması
Dosya adı: ParametrelendirilmişMain.java
import java.util.*; abstract class Shape { protected int x; protected int y; // parameterized constructor public Shape(int x,int y) { this.x=x; this.y=y; } // abstract method to calculate area public abstract double getArea(); // other methods public void setPosition(int x,int y) { this.x=x; this.y=y; } public void printPosition() { System.out.println('The position: ('+ x+', ' +y+')'); } } class Circle extends Shape { protected double radius; // parameterized constructor public Circle(int x,int y,double radius) { super(x,y); this.radius=radius; } // implementation of getArea() for Circle public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { protected double side; // parameterized constructor public Square(int x,int y,double side) { super(x, y); this.side = side; } // implementation of getArea() for Square public double getArea() { return side * side; } } public class ParameterizedMain { public static void main(String args []) { // create a Circle object with parameterized constructor Circle circle = new Circle(2, 3, 5); // print the area and position of the Circle object System.out.println('Area of circle is: '+circle.getArea()); circle.printPosition(); // create a Square object with parameterized constructor Square square = new Square(5, 7, 4); // print the area and position of the Square object System.out.println('Area of square is:' +square.getArea()); square.printPosition(); } }
Çıktı:
Area of circle is: 78.53981633974483 The position: (2, 3) Area of square is:16.0 The position: (5, 7)
3. Yapıcıyı kopyalayın: copy yapıcısı, mevcut bir nesneyle eşit değerlere sahip yeni bir nesne oluşturmak için kullanılır (yani, öğe daha önce yaratılmıştır). Zaten mevcut/var olan bir nesnenin kopyası olabilecek yeni bir nesne oluşturmamız gerektiğinde faydalıdır. Kopya yapıcı yalnızca bir bağımsız değişkenle veya aynı sınıfın öğesi olan bir parametreyle tanımlanır. Daha sonra yapıcı, parametre nesnesiyle aynı değerlere sahip yeni bir nesne oluşturur.
ALGORİTMA:
Aşama 1: Örnek değişkenleri ve varsayılan kurucuyu içeren soyut bir sınıf bildirin.
Adım 2: Aynı sınıf tipindeki bir parametreye sahip bir kopya oluşturucu tanımlayın.
Aşama 3: Kopya oluşturucuda, örnek değişkenleri parametre nesnesinden yeni nesneye kopyalamak için super anahtar sözcüğünü kullanarak üst sınıf kopya oluşturucuyu çağırın.
Adım 4: Alt sınıftaki ekstra örnek değişkenlerin değerlerini yeni öğeye atayın.
Adım 5: Alanı hesaplamak için soyut yöntemi uygulayın.
Adım 6: Gerektiğinde diğer yöntemleri tanımlayın.
robot bileşenleri
Adım 7: Ana işlevde sınıfın bir nesnesini oluşturun.
Adım 8: Konumu ve diğer örnek değişkenleri gerektiği gibi ayarlayın.
Adım 9: Kopya yapıcıyı kullanarak ve orijinal öğeyi parametre olarak ileterek yeni bir nesne oluşturun.
Adım 10: Hem orijinal hem de kopyalanan nesnelerin alanını ve konumunu yazdırın.
Uygulama:
Yukarıdaki adımların uygulanması aşağıda verilmiştir.
Dosya adı: CopyMain.java
import java.util.*; abstract class Shape { protected int x; protected int y; // copy constructor public Shape(Shape other) { this.x=other.x; this.y=other.y; } // default constructor public Shape() { // initialize default values for fields x=0; y=0; } // abstract method to calculate area public abstract double getArea(); // other methods public void setPosition(int x,int y) { this.x =x; this.y =y; } public void printPosition() { System.out.println('Position: (' +x+ ', ' +y+ ')'); } } class Circle extends Shape { protected double radius; // copy constructor public Circle(Circle other) { super(other); this.radius =other.radius; } // constructor public Circle(double radius) { this.radius =radius; } // implementation of getArea() for Circle public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { protected double side; // copy constructor public Square(Square other) { super(other); this.side =other.side; } // constructor public Square(double side) { this.side=side; } // implementation of getArea() for Square public double getArea() { return side * side; } } public class CopyMain { public static void main(String[] args) { // create a Circle object Circle circle1 = new Circle(5); circle1.setPosition(2,3); // create a copy of the Circle object using the copy constructor Circle circle2 = new Circle(circle1); // print the area and position of the original and copied Circle objects System.out.println('Original Area of circle: ' +circle1.getArea()); circle1.printPosition(); System.out.println('Copied Area of circle: '+circle2.getArea()); circle2.printPosition(); // create a Square object Square square1 =new Square(4); square1.setPosition(5,7); // create a copy of the Square object using the copy constructor Square square2 = new Square(square1); // print the area and position of the original and copied Square objects System.out.println('Original Area of square: '+square1.getArea()); square1.printPosition(); System.out.println('Copied Area of square: '+square2.getArea()); square2.printPosition(); } }
Çıktı:
Original Area of circle: 78.53981633974483 Position: (2, 3) Copied Area of circle: 78.53981633974483 Position: (2, 3) Original Area of square: 16.0 Position: (5, 7) Copied Area of square: 16.0 Position: (5, 7)