it-swarm.com.de

Wie und wann man eine abstrakte Klasse benutzt

Dies ist mein Testprogramm in Java. Ich möchte wissen, wie viel abstrakte Klasse hier wichtiger ist und warum wir hierfür abstrakte Klasse verwenden.

Handelt es sich um eine obligatorische oder die beste Methode? Wenn das so ist, wie?

class Shape1 {
    int i = 1;
    void draw() {
        System.out.println("this is shape:" + i);
    }
}

class Shape2 {
    int i = 4;
    void draw() {
        System.out.println("this is shape2:" + i);
    }
}


class Shape {
    public static void main(String args[]) {
        Shape1 s1 = new Shape1();
        s1.draw();

        Shape2 s2 = new Shape2();
        s2.draw();
    }
}
34
user568313

Sie würden hier eine abstrakte Klasse oder Schnittstelle verwenden, um eine gemeinsame Basisklasse/Schnittstelle zu erstellen, die die void draw() -Methode bereitstellt, z.

abstract class Shape() {
  void draw();
}

class Circle extends Shape {
   void draw() { ... }
}

...

Shape s = new Circle();
s.draw();

Ich würde im Allgemeinen eine Schnittstelle verwenden. Sie können jedoch eine abstrakte Klasse verwenden, wenn:

  1. Sie müssen/möchten allgemeine Funktionen oder Klassenmitglieder bereitstellen (z. B. das int i - Mitglied in Ihrem Fall).
  2. Ihre abstrakten Methoden haben etwas anderes als öffentlichen Zugriff (der einzige Zugriffstyp, der für Schnittstellen zulässig ist), z. In meinem Beispiel hätte void draw() die Sichtbarkeit eines Pakets.
20
Thomas

Eine abstrakte Klasse hat eine Beziehung vom Typ "Ist-Ist" zu Ihren Unterklassen. So könnten Sie zum Beispiel eine abstrakte Klasse Shape haben, deren Inhalt jede Form hat (wie eine Zeichenfunktion), und dann eine Klasse SquareShape. Jede Quadratform ist eine Form, aber nicht alle Formen sind Quadratformen.

In Ihrem Beispiel haben Sie 2 Formtypen und eine Klasse mit 2 Instanzen davon. Das ist keine Beziehung, die Sie mit abstract definieren sollten, denke ich.

Vielleicht möchten Sie jedoch etwas mit Ihren Namen anfangen, da dies ein eher kleines Beispiel ist und es schwierig ist, die tatsächlichen Auswirkungen der Dateien und ihre Funktionsweise zu erkennen.

5
Nanne

beispiel Beispiel für die Verwendung der abstrakten Klasse in Java.

package use_of_abstract;

abstract class Shapes 
{
   int i=1;

   abstract void draw();
   abstract void color(String mycolor);

   //not an abstract method
   void fill()
   {
      System.out.println("Non-Abstract Method -> Fill"); 
   }

   //not an abstract method
   String anotherMethod(String input) 
   {
       return input + " additional text";
   }

}

package use_of_abstract;

public class Shape_One extends Shapes 
{
    int i=1;

    @Override
    void draw() 
    {
        System.out.println("This is Shape One:"+i);
    }

    @Override
    void color(String mycolor) 
    {
        System.out.println("This is Shape One:"+mycolor);

    }

    @Override
    String anotherMethod(String anotherMethod) 
    {
        System.out.println("This is Shape One:"+anotherMethod);
        return anotherMethod;

    }

}

package use_of_abstract;

public class Shape_Two extends Shapes
{
    int i=2;

    @Override
    void draw() 
    {
        System.out.println("This is Shape Two :"+i);
    }

    @Override
    void color(String mycolor) 
    {
        System.out.println("This is Shape Two Color:"+mycolor);
    }

    @Override
    String anotherMethod(String anotherMethod) 
    {
        System.out.println("This is Shape Two:"+anotherMethod);
        return anotherMethod;

    }

}

package use_of_abstract;

import Java.awt.Color;

public class Shape_Main 
{

    public static void main(String args[])
    {
        Shape_One s1;
        Shape_Two s2;

        s1=new Shape_One();
        s2= new Shape_Two();

        s1.draw();
        s2.draw();

        s1.fill();
        s2.fill();

        s1.color("Blue");
        s2.color("Green");


        s1.anotherMethod("HELLO..............Its Another Method 1");
        s2.anotherMethod("HELLO..............Its Another Method 2");


    }   
}
3

Eine abstrakte Klasse ist eine Klasse, in der mindestens eine Methode nicht implementiert ist, oder das Schlüsselwort abstract. Eine abstrakte Methode könnte beispielsweise so aussehen:

public abstract String myMethod(String input);

(Beachten Sie, dass die Methode mit einem Semikolon endet).

Und eine Klasse könnte so aussehen:

public abstract class MyClass {

    public abstract String myMethod(String input);

    public String anotherMethod(String input) {
        return intput + " additional text";
    }
}

Eine abstrakte Klasse kann nicht instanziiert werden. Abstrakte Klassen benötigen eine Unterklasse, um das fehlende Verhalten zu implementieren, damit es instanziiert werden kann.

Das Hauptziel einer abstrakten Klasse ist die gemeinsame Implementierung gemeinsamen Verhaltens - die Förderung der Wiederverwendung von Code.

In Java kann derselbe Effekt erzielt werden, indem eine Komposition von Klassen anstelle einer Vererbung von allgemein definierten abstrakten Klassen verwendet wird. Dies ermöglicht modularere, funktionsspezifische Klassen, die die Wiederverwendung von Code fördern und damit die Wartbarkeit erhöhen.

Mein Rat wäre, die abstrakte Klasse nur zu verwenden, wenn dies unbedingt erforderlich ist, und sie insbesondere nicht als Trickkiste mit allen möglichen Funktionen zu verwenden.

In Scala) würde man Merkmale verwenden, die eine elegante Art sind, dies zu lösen. Es erfordert jedoch viel Aufmerksamkeit, um es richtig durchzuhalten.

2

Abstrakte Klasse, wie der Name schon sagt, ist abstrakt.

Die abstrakte Klasse spricht nicht über den Implementierungsteil. Tatsächlich erweitern wir die abstrakte Klasse, um die Implementierung für ihre abstrakten Methoden bereitzustellen. Es kann auch nicht abstrakte Methoden haben.

Überprüfen Sie hier: Verwendung der abstrakten Klasse in Java

EDIT:

Beispielcode :

abstract class Shapes {

 int i=1;
 abstract void draw(); 

 // Remember : Non-abstract methods are also allowed 
 void fill() {
     System.out.println("Non abstract method - fill");
 }
}

class Shape1 extends Shapes {

 int i=1;
 void draw(){
 System.out.println("This is Shape 1:"+i);
 }
}

class Shape2 extends Shapes {
    int i=2;
    void draw() {
        System.out.println("This is Shape 2:"+i);
    }
}

class Shape {

public static void main(String args[])
       {
        Shape1 s1 = new Shape1();
        s1.draw();                     // Prints This is Shape 1:1

        Shape2 s2 = new Shape2();
        s2.draw();                     // Prints This is Shape 2:2
       }
  }
1
sgokhales

Gemeinsame Dinge + Gelegentliche Dinge = Abstrakte Klasse

Wann verwenden?

Eine abstrakte Klasse eignet sich am besten für Szenarien, in denen es viele wiederverwendbare Codes gibt, die Sie nicht immer wieder schreiben möchten. + Es gibt nur wenige Dinge, die für jede Klasse spezifisch sind.

Beispiel?

Zeremonie:

Gemeinsame Dinge: Sing Anthem, Hoist Flag etc
Spezielle Dinge: Indische Flagge, Indische Hymne (Für Indien), Chinesische Flagge, Chinesische Hymne (Für China) usw.

enter image description here

Wie benutzt man es?

1) Erstelle eine abstrakte Klasse
2) Stellen Sie alles in öffentliche Methoden, die üblich sind
3) Schreiben Sie alles in abstrakte Methoden, die für Kindklassen spezifisch sind

Wo ist der Beispielcode?

Basisklasse:

public abstract class BaseCeremony{

    Flag natonalFlag;
    Anthem anthem;

    //**** Common Task ******//
    public void startCeremony(){
        configure();
        hoistFlag();
        singAnthem();
    }

    public void hoistFlag(){
        natonalFlag.hoist();                       
    }

    public void singAnthem(){
        anthem.anthem();                       
    }

    private void configure(){
        natonalFlag = provideFlag();
        anthem = provideAnthem();
    }

    //**** Differs in all part ******//
    public abstract Flag provideFlag();
    public abstract Anthem provideAnthem();

}

In der untergeordneten Klasse müssen Sie nur die Implementierung des ungewöhnlichen Teils bereitstellen.
ChildClass

public class IndianCeremony extends BaseCeremony{

       public Flag provideFlag(){
            return new IndianFlag();
       }

       public Anthem provideAnthem(){
            return new IndianAnthem();
       }
}

Bonus

  • Eine abstrakte Klasse ist eine unvollständige Klasse, weshalb Sie ihre Objekte nicht erstellen können.
  • Eine abstrakte Klasse sollte mindestens eine abstrakte Methode haben, um als abstrakte Klasse zu gelten
  • Beispiel für die Implementierung einer abstrakten Klasse in Android
1
Rohit Singh