![Java Soyut Yöntemi ve Siz - 1](https://cdn.codegym.cc/images/article/0e6f3799-6e9f-4db7-9ac1-2cf69ce8e513/800.jpeg)
Soyut Yöntem nedir?
Soyut bir yöntem, uygulaması olmayan bir yöntemdir. Yani, sadece bir bildirimi vardır, yani kabul edeceği adı, dönüş tipini ve değişkenleri bilirsiniz. İşte temel bir soyut yöntem örneği:public abstract int example(int a1, int a2);
Bu metoda baktığınızda bir tamsayı döndürdüğünü ve iki tamsayıyı argüman olarak kabul ettiğini anlayabilirsiniz. Söyleyemeyeceğiniz şey, bu yöntemin nasıl uygulandığıdır. Bunun nedeni, onu uygulamak için onu geçersiz kılmanız gerektiğidir. Java'da soyut bir yöntem oluştururken, birkaç yönergeye uymanız gerekir, aksi takdirde programınız doğru şekilde derlenmez. Hatırlamak:
-
Java soyut yöntemlerinin uygulaması yoktur. Yani, hiçbir zaman kaşlı ayraçlar ve yöntemin nasıl kullanılacağını anlatan bir gövde gelmemelidir. Sadece noktalı virgülle biter.
-
Soyut bir yöntem oluşturursanız, bu yalnızca soyut bir sınıfa konulabilir. Yani, içinde soyut bir yöntem olan somut bir sınıfa sahip olamazsınız.
Ben. Bir yan not olarak, soyut bir sınıfınız varsa, yapıcılar içerebilir. Bununla birlikte, soyut bir yöntemi olması gerekmez. -
Somut bir sınıf, soyut bir sınıfı genişlettiğinde, üst sınıfın tüm soyut yöntemlerini de uygulamalıdır veya somut olamaz ve soyut olarak bildirilmelidir.
Soyut Java Sınıflarını Genişletme
Diyelim ki çevre ve alanı döndürecek temel şekillerle ilgili bir program yazmak istiyoruz. Böylece bir üst soyut sınıf oluşturuyoruz. Ancak her şeklin kendi kuralları olduğu için her birinin farklı hesaplanması gerekir, bu nedenle soyut Shape sınıfını şu şekilde yazarız :abstract class Shape {
String shapeName = " ";
Shape(String name) {
this.shapeName = name;
}
abstract double area();
abstract double perimeter();
}
Şimdi, bu soyut yöntemleri gerçekten kullanmak istiyorsak, soyut Java üst sınıfı Shape'i genişletmeli ve ardından yöntemleri başlatmalıyız. Bu nedenle, her somut sınıf, alan ve çevre soyut yöntemlerini uygulamalıdır.
class Quadrilateral extends Shape
{
double length, width;
Quadrilateral(double l, double w, String name)
{
super(name);
this.length = l;
this.width = w;
}
@Override
public double perimeter()
{
return ((2*length)+(2*width));
}
@Override
public double area()
{
return (length*width);
}
}
Implementing the Quadrilateral class would then look like this
class Main
{
public static void main (String[] args)
{
// creating a Quadrilateral object using Shape as reference
Shape rectangle = new Quadrilateral(3,4, "Rectangle");
System.out.println("Area of rectangle is " + rectangle.area());
System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
}
}
Konsoldan çıktı daha sonra şöyle görünür:
Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Quadrilateral sınıfının Shape(String name) yapıcısını Shape üst sınıfından başlatmak zorunda olmadığına dikkat edin . Bunun nedeni soyut bir yöntem olmamasıdır. Ancak, bir sınıfta yalnızca bir alan veya çevre uyguladıysanız, her ikisini de içermediği için yeni sınıfın soyut olması gerekir. Arayüzlerde soyut yöntemleri de kullanabilirsiniz.
Arayüzlerle Soyut Java Yöntemleri
Arayüzün ne olduğunu ve soyut bir sınıftan nasıl farklı olduğunu hızlıca gözden geçirelim. Bir arabirimde, bir arabirimde bildirilen tüm değişkenler genel, statik ve nihaidir. Soyut sınıflar ise yalnızca nihai olmayan değişkenlere sahiptir. Bir arabirimdeki her şey varsayılan olarak herkese açıktır. Soyut bir sınıf özel, korumalı, genel vb. olabilir. Son olarak, bir sınıf bir arabirimi genişletmez, onu uygular. JDK 8'den önce, bir arayüzün içinde soyut yöntemlerden başka bir şey olamazdı. Artık bir arayüzün varsayılan ve statik yöntemleri olabilir. Bu nedenle, en iyi uygulamalar soyut yöntemleri genişletilebilir şablonlar olarak kullanmaktan uzaklaştı ve Arayüzlere ve bunları uygulamaya odaklandı. Öyleyse, Shape'i Arayüz olarak oluşturacak ve ardından Dörtgen olarak uygulayacak olsaydınız, nasıl görünürdü? İlk olarak, Shape(String name) yapıcısını ortadan kaldırmanız gerekir . Sadece iki soyut yöntemle şöyle görünürdü:interface Shape {
abstract double area();
abstract double perimeter();
}
So the Quadrilateral class would then look like this:
class Quadrilateral implements Shape {
double length, width;
Quadrilateral(double l, double w) {
this.length = l;
this.width = w;
}
@Override
public double perimeter() {
return ((2*length)+(2*width));
}
@Override
public double area() {
return (length*width);
}
}
Son olarak, Shape arayüzünü uygularken yeni Quadrilateral'i kullanmak hemen hemen aynı olacaktır:
class Main
{
public static void main (String[] args)
{
// creating a Quadrilateral object using Shape as reference
Shape rectangle = new Quadrilateral(3,4);
System.out.println("Area of rectangle is " + rectangle.area());
System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
}
}
Ve konsol çıktısı şöyle görünür:
Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Arayüzler ve soyut sınıflar arasındaki farklar hakkında daha fazla bilgi edinmek isterseniz, burada daha fazla bilgi bulabilirsiniz.
Ama Neden Soyut Java Yöntemlerini Kullanmalı?
Java'da soyut yöntemlerin kullanılmasının ve bunları kullanmakta neden rahat olmanız gerektiğinin birçok nedeni vardır. Uygun olduğunda bunları kullanmanız için üç kısa neden.-
Çabaların tekrarından kaçının – Örnek kodlamamıza tekrar bakın; Sizin ve ekibinizin dikdörtgen dışındaki şekiller için sınıflar oluşturmanız gerektiğini hayal edin. Bu sınıfı tasarlamak için bulabileceğiniz kaç farklı yol var? On? 15 mi? Ve bu basit bir problem. Çok daha karmaşık bir şey hayal edin. Siz ve ekibiniz yüzlerce yol bulabilirsin. O zaman onları tutarlı bir programda bir araya getirmek gibi göz korkutucu bir görevle karşı karşıya kalacaksınız. Bu bizi bir sonraki noktamıza getiriyor: uygulamayı tanımlama.
-
Java'daki Soyut Yöntemler, kullanım ve uygulamanın tanımına izin verir - Soyut bir sınıf veya arayüz kullandığınızda ve tasarım gereği soyut yöntemler, diğer insanların arayüzünüzle nasıl etkileşime gireceğini tanımlarsınız. Bu, hangi değişkenleri kullanmaları gerektiğini ve hangi dönüş türlerini bekleyebileceklerini bilmelerini sağlar.
Bunları geçersiz kılıp arabiriminizi benzersiz şekillerde uygulayan somut sınıflar oluşturabilseler de, yine de kodunuzun temel kullanımını değiştirmiş olursunuz. Birisi Shape'i uygulamak istiyorsa, hem çevreyi hem de alanı geçersiz kılmak veya uygulamak zorundadır. - Okunabilirlik ve Hata Ayıklama – Soyut yöntemlere sahip olmak, kodunuzun okunabilirliğini artıracaktır. Arayüz uygulayan bir sınıf yazdığınızda, ne arayacağınızı bilirsiniz. Arayüzdeki her soyut yöntemin uygulamada olacağını biliyorsunuz ve bu, okumayı ve hataları izlemeyi kolaylaştırıyor. Soyut yöntemler, Java'da ve diğer nesne yönelimli dillerde polimorfizmi doğru bir şekilde kullanmayı öğrenmenin sadece başlangıcıdır. Bunları anlamaya ve kullanmaya başladığınızda, kodlama yolculuğunuzda tamamen yeni bir bölüm başlayacak.