Есть два фундаментальных механизма для построения новых классов из существующих: наследование и агрегация. Есть смысл унаследоваться от существующего класса Vehicle при определении класса Car, потому что автомобиль - это транспортное средство. Класс Vehicle имеет несколько частей, поэтому имеет смысл определить композитный объект (composite object) класса Vehicle, который бы образовывал одно целое из объектов классов Engine, Axle, и GearBox из которых делается транспортное средство.
Поля определенные в суперклассе как private не доступны из подклассов. Чтобы поле было доступно его нужно определить как protected.
В Java подкласс может расширять только один суперкласс.
Класс PrintableCharStack называется подклассом, а класс CharStack называется суперклассом. CharStack является обобщением (generalization) всех символьных стеков, а класс PrintableCharStack является специализацией (specialization) символьного стека позволяющей печатать его элементы.
Объекты класса PrintableCharStack будут отвечать на сообщения также как и объекта класса CharStack, но будут иметь дополнительную функциональность определенную в подклассе.
// File: CharStack.java public class CharStack { // Instance variables: protected char[] stackArray; // The array implementing the stack. protected int topOfStack; // The top of the stack. // Static variable private static int counter; // Constructor now increments the counter for each object created. public CharStack(int capacity) { stackArray = new char[capacity]; topOfStack = -1; counter++; } // Instance methods: public void push(char element) { stackArray[++topOfStack] = element; } public char pop() { return stackArray[topOfStack--]; } public char peek() { return stackArray[topOfStack]; } public boolean isEmpty() { return topOfStack == -1; } public boolean isFull() { return topOfStack == stackArray.length - 1; } // Static method public static int getInstanceCount() { return counter; } }
В Java подкласс может расширять только один суперкласс.
// File: PrintableCharStack.java public class PrintableCharStack extends CharStack { // Instance method public void printStackElements() { for (int i = 0; i <= topOfStack; i++) System.out.print(stackArray[i]); // print each char on terminal System.out.println(); } // Constructor calls the constructor of the superclass explicitly. PrintableCharStack(int capacity) { super(capacity); } }
Класс PrintableCharStack называется подклассом, а класс CharStack называется суперклассом. CharStack является обобщением (generalization) всех символьных стеков, а класс PrintableCharStack является специализацией (specialization) символьного стека позволяющей печатать его элементы.
Объекты класса PrintableCharStack будут отвечать на сообщения также как и объекта класса CharStack, но будут иметь дополнительную функциональность определенную в подклассе.
PrintableCharStack pcStack = new PrintableCharStack(3); pcStack.push('H'); pcStack.push('i'); pcStack.push('!'); pcStack.printStackElements(); // Prints “Hi!” on the terminal
Комментариев нет:
Отправить комментарий