Abstraktní třída je třída jejíž objekty nemohou být vytvořeny. Je to vlastně jakási šablona, kterou musíme vyplnit konkrétní implementací.
V následující ukázce použití abstraktní třídy programujeme třídu Shape
jako abstraktní. To říká že nemůžeme vytvořit žádný objekt této třídy. Vytvořání (instanciace) objektu třídy Shape
je nesmyslné. Poté naprogramujeme třídu Circle
jako podtřídu třídy Shape
. Objekty třídy Circle
již mohou být vytvářeny.
abstract class Shape { private int locationX, locationY; private Color color; private int lineThickness; setLocation(int x, int y) {locationX=x; locationY=y;} setColor(Color col) {color = col;} abstract void drawShape(); // Abstraktní metoda. // abstraktní metoda MUSÍ být v podtřídě implementována. /* ostatní metody */ } class Circle extends Shape { int radius; Circle(int x, int y, int rad) { radius = rad; setLocation(x,y); } drawShape() { // code here } }
public abstract class Number implementrs java.io.Serializable { /* Returns the value as a various primitive types (this may involve rounding or truncation). */ public abstract int intValue(); public abstract long longValue(); public abstract float floatValue(); public abstract double doubleValue(); public byte byteValue() { return (byte)intValue(); } public short shortValue() { return (short)intValue(); } /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = -8742448824652078965L }
interface I1 { void i1M1(); int i1m2(I1 p1, float p2); } interface I2 { abstract int i2M2(); } interface I3 { I3 i3M1(I2 p1) { } interface I4 extends I3,I1 { void i4M1(); } abstract class C1 implements I1, I2 { void i1M1() {/* code */} abstract void c1M2(); } abstract class C2 extends C1 implements I2 { } class C3 extends C2 implementrs I4 { // code } // C3 requires code for the following methods c1M2, i1M2, i2M2, i4M1 and i3M1.