Существующий класс дополняется новыми полями и методами, и обладает интерфейсом родительского.
1) Java разрешает один родительский класс.
2) У всех классов есть один общий родитель –класс Object.
class Cleanser {
private String s = “Cleanser”;
public void append (String a) {s += a;}
public void dilute () {append (“dilute ()”);}
public void apply () {append (“apply ()”);}
public void scrub () {append (“scrub ()”);}
public String to String {return s;}
public static void main (String [] args) {
Cleanser x = new Cleanser ();
x.dilute ();
x.apply ();
x.scrub (); //сформировали строку
System.out.println (x); // напечатали строку
}
}
Класс-наследник:
public class Detergent extends Cleanser {
public void scrub (){ //изменяем метод -переопределение (overriding)
append (“Detergent.scrub()”);
super.scrub (); / вызываем метод базового класса
}
public void foam (){append (“foam ()”);}
public static void main (String[] args) { // main может иметь любой класс
Detergent x = new Detergent ();
x.dilute(); //метод базового класса
x.apply (); //метод базового класса
x.scrub ();//метод класса-наследника
x.foam (); //сформировали строку
System.out.println (x); // напечатали ее
System.out.println (“Test Base Class”);
Cleanser.main (args);//метод базового класса
}
}
Напечатается:
Cleanser dilute () apply () Detergent.scrub () scrub () foam ()
|
|
Test Base Class
Cleanser dilute() apply () scrub()
Пример демонстрирует:
1) служебное слово extends;
2) наследник получил все методы и поля базового класса;
3) метод м.быть переопределен (overriding) с той же сигнатурой;
4) служебное слово super можно использовать для вызова методов базового класса;
5) переопределяться могут только не privat-методы.
Подкласс-специализированная версия базового класса. (is-a). Создаются иерерархии классов. Родитель определяет общие свойства классов, потомки добавляют свои свойства. К приватным методам у наследника доступа нет. Т.е. закрытые методы в потомке недоступны (их нельзя переопределить, так же, как final).