Informatika4-2018/Gyakorlat7

A MathWikiből
A lap korábbi változatát látod, amilyen Gaebor (vitalap | szerkesztései) 2018. október 28., 19:34-kor történt szerkesztése után volt.

Előző - Fel - Következő

Tartalomjegyzék

Abstract

Egy interface (lásd előző gyakorlat) egyetlen metódusa sincsen implementálva, adattagja is csak bizonyos tupajdonságú lehet. Egy abstract osztály azonban keverheti az implementált és implementálatlan metódusokat, adattagja is tetszőleges lehet.

public abstract class A {
    protected float x_;
    public A()  // default konstruktor
    {
        x_ = 0.0f;
    }
    public A(float x)  // konstruktor
    {
        x_ = x;
    }
    public void SetX(float x)
    {
        x_ = x;
    }
    public abstract float f(); // nincsen implementálva
}

abstract-al illethetünk egy metódust, ekkor kötelezően a bennfoglaló osztály is abstract kell legyen. De abstract osztálynaklehetnek nem abstract, azaz implementált metódusai.

abstract osztály nem példányosulhat, de belőle származtatott osztály igen, ha minden absztrakt metódusát implementálja (már nem absztrakt többé).

public class B extends A {
    public B(float x)  // konstruktor meghívja az ősosztály konstruktorát
    {
        super(x);
    }
    public float f()
    {
        return (float)Math.sin(x_);
    }
}

Ekkor B már nem absztrakt, lehet példányosítani:

A a = new B(3);
a.f(); // valójában a B.f fut le (override)

Feladatok

Síkbeli objektumok

Készítsunk egy Point osztályt, mely tartalmaz

  • két koordinátát
  • eltolás metódust
  • setter/getter-t a koordinátákra

Készítsunk egy PlanarObject osztályt, mely tartalmaz

  • Point tömböt, amiben koordináták vannak
  • egy translate metódust, ami a koordinátáinak mindegyikát eltolja (a Point.translate metódussal)
  • egy area metódust ami legyen absztrakt (még nem implementáljuk)

Öröklődjön a PlanarObject osztályból egy Square és egy Triangle osztály, melyek nem absztaktok!

Point

Legyen a Point osztály maga is egy PlanarObject'!

Immutable

Oldjuk meg öröklődéssel/interface-el hogy minden osztályunkból legyen egy Immutable előtagú is, ami immutable (nem lehet eltolni, nincs setter-e).

ImmutablePoint <-- Point
ImmutablePlanarObject <-- PlanarObject
ImmutablePlanarObject <-- ImmutableSquare <-- Square
PlanarObject <-- Square

Előző - Fel - Következő

Személyes eszközök