Abstrakte Klassen vs. Interface

Diskutiere Abstrakte Klassen vs. Interface im Allgemeine Java-Themen Bereich.
P

Panda9296

Hi Leutz,
vielleicht liegt es auch an der Uhrzeit^^, aber ich sollte folgende Klassen erst in ein Interface binden was super geklappt hat und das Interface dann in eine abstrakte Klasse wandeln. Leider schimpft der Compoiler und möchte die abstrakte Klasse in ein Interface wieder setzen^^. Warum?

Code:
import java.util.Random;

import inheritance.miguel.gutierrez.Shape;


public class Circle extends Shape{
    
    
    Random rondom= new Random();
    double a;
    
    

    public Circle(double a) {
        super();

    }
    public Circle() {
        super();
    }

    
    public double calculateArea() {
        a = rondom.nextDouble();
        return Math.PI*Math.sqrt(a);
    }


    public double calculateScope() {
        a = rondom.nextDouble();
        return 2*Math.PI*a;
    }
    @Override
    public String toString() {
        return "[Circle Flächeninhalt: "+calculateArea()+ "]   [Kreisumfang "+ calculateScope()+"]";
    }
    

}
Code:
Random rondom =new Random();
    double a;
    double b;
    
    

    public Rectangle(double a, double b) {
        super();
        this.a = a;
        this.b = b;
    }


    public Rectangle() {
        super();
    
    }

    
    
    public double calculateArea() {
        a = rondom.nextDouble();
        b = rondom.nextDouble();
        return a*b;
    }

    
    public double calculateScope() {
        a = rondom.nextDouble();
        b = rondom.nextDouble();
        return (2*(a+b));
    }


    @Override
    public String toString() {
        return "[Rechteck: Flächeninhalt: "+ calculateArea()+"] [Umfang: "+calculateScope()+"]";
    }
    

    
    


    
}
Code:
import java.util.Random;

import inheritance.miguel.gutierrez.Shape;


public class Triangle extends Shape{
    
    
    Random rondom= new Random();
    double a;
    double b;
    double c;
    double s;
    
    


    public Triangle(double a, double b, double c, double s) {
    
        this.a = a;
        this.b = b;
        this.c = c;
        this.s = s;
    }
    public Triangle() {
        super();
    }
    


    public double calculateArea() {
        a= rondom.nextDouble();
        b = rondom.nextDouble();
        c= rondom.nextDouble();
        s = (a+b+c)/2;
        return Math.sqrt(s*(s-a)*(s-b)*(s-c));
    }


    public double calculateScope() {
        a= rondom.nextDouble();
        b = rondom.nextDouble();
        c= rondom.nextDouble();
        return a+b+c;
    }
    @Override
    public String toString() {
        return "[Dreieck Flächeninhalt "+calculateArea()+"] [ Umfang "+calculateScope()+"]";
    }
    

}
Code:
public abstract class Shape {
    

    double a;
    
    
    
    public Shape(double a) {
        this.a=a;

    }
    public Shape() {
        
    }
    abstract double calculateArea();
    abstract double calculateScope();

}
Code:
import java.util.ArrayList;
import java.util.Random;

import inheritance.miguel.gutierrez.Shape;

public class Start {

    public static void main(String[] args) {

        ArrayList<Shape> shapes = new ArrayList<>();
        Random random = new Random();
        
        int rand = random.nextInt(5);
        for (int i = 0; i < rand; i++) {
            shapes.add((Shape) new Circle());
        }
        
        rand = random.nextInt(5);
        for (int i = 0; i < rand; i++) {
            shapes.add((Shape) new Rectangle());
        }

        rand = random.nextInt(5);
        for (int i = 0; i < rand; i++) {
            shapes.add((Shape) new Triangle());
        }
        
        
        for(int i=0;i<shapes.size();i++) {
            System.out.println(shapes.get(i).toString());
        }
        
        


    }

}
 
L

LimDul

An welcher Stelle meckert er?

Die Casts beim hinzufügen in die ArrayList sind übrigens überflüssig.

Das die ganzen Instanz-Variablen in der Form Blödsinn sind, ist hoffentlich Absicht - die werden im Konstruktor mal gesetzt (Die von Shape aber nie) und in den calculate Methoden mit Zufallszahlen überschrieben.
 
P

Panda9296

An welcher Stelle meckert er?

Die Casts beim hinzufügen in die ArrayList sind übrigens überflüssig.

Das die ganzen Instanz-Variablen in der Form Blödsinn sind, ist hoffentlich Absicht - die werden im Konstruktor mal gesetzt (Die von Shape aber nie) und in den calculate Methoden mit Zufallszahlen überschrieben.

Ja er meckert direkt bei extends ... er würde es gerne in implements haben ^^- Ja ist mehr oder weniger Absicht^^. Ist eine Aufgabe
 
L

LimDul

Das kann eigentlich nicht sein, sofern Shape als abstract class definiert ist. Sicher das alles korrekt gespeichert ist und du die richtigen Imports hast?
 
Thema: 

Abstrakte Klassen vs. Interface

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben