<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">// abstract classes and methods

abstract class Data {
    // abstract class can contain IVs
    int k;

    // abstract class can contain mix of abstract and
    // non abstract methods
    void print1() {
	System.out.println(k);
    } // method print1

    // all subclasses will flesh out the print2 method
    abstract public void print2();
} // class Data

class Data1 extends Data {
    Data1(int k) {
	this.k = k;
    }
    public void print2() {
	System.out.println(k*k);
    } // method print2
} // class Data1

class Data2 extends Data {
    Data2(int k) {
	this.k = k;
    }
    public void print2() {
	System.out.println(k+k);
    } // method print2
} // method Data2

public class abstract1 {
    public static void main(String args[]) {

	// instantiate objects
	Data1 d1 = new Data1(3);
	Data2 d2 = new Data2(3);

	// access inherited method: print1
	// access abstract method: print2

	d1.print1();
	d1.print2();
	d2.print1();
	d2.print2();

    } // method main
} // class abstract1

/* Output
3
9
3
6
*/
</pre></body></html>